diff --git a/tools/scan-view/Reporter.py b/tools/scan-view/Reporter.py
index b32caf5..22e4311 100644
--- a/tools/scan-view/Reporter.py
+++ b/tools/scan-view/Reporter.py
@@ -72,8 +72,10 @@
 Description: %s
 """%(report.title, report.description)
 
-        if not parameters.get('To') or not parameters.get('From'):
-            raise ValueError,'Invalid email parameters.'
+        if not parameters.get('To'):
+            raise ReportFailure('No "To" address specified.')
+        if not parameters.get('From'):
+            raise ReportFailure('No "From" address specified.')
 
         msg = MIMEMultipart()
         msg['Subject'] = 'BUG REPORT: %s'%(report.title)
@@ -85,11 +87,16 @@
         msg.attach(MIMEText(mainMsg, _subtype='text/plain'))
         for file in report.files:
             self.attachFile(msg, file)
-        
-        s = smtplib.SMTP(host=parameters.get('SMTP Server'),
-                         port=parameters.get('SMTP Port'))
-        s.sendmail(msg['From'], msg['To'], msg.as_string())
-        s.close()
+
+        try:
+            s = smtplib.SMTP(host=parameters.get('SMTP Server'),
+                             port=parameters.get('SMTP Port'))
+            s.sendmail(msg['From'], msg['To'], msg.as_string())
+            s.close()
+        except:
+            raise ReportFailure('Unable to send message via SMTP.')
+
+        return "Message sent!"
 
 class BugzillaReporter:
     def getName(self):
diff --git a/tools/scan-view/Resources/scanview.css b/tools/scan-view/Resources/scanview.css
index 280ce90..28b502a 100644
--- a/tools/scan-view/Resources/scanview.css
+++ b/tools/scan-view/Resources/scanview.css
@@ -19,7 +19,6 @@
 td { text-align:left }
 td.View a { 
     white-space: nowrap; 
-    -webkit-appearance:square-button; 
     padding-left:1em; 
     padding-right:1em; 
     padding-top:0.5ex; 
@@ -43,7 +42,7 @@
 table.form {
     background-color: #999;
     border: 1px solid #333; 
-    padding: 5px auto;
+    padding: 2px;
 }
 
 td.form_label {
@@ -64,3 +63,8 @@
     vertical-align: top;
 }
 
+h1.SubmitFail {
+    color: #f00;
+}
+h1.SubmitOk {
+}
diff --git a/tools/scan-view/ScanView.py b/tools/scan-view/ScanView.py
index c213d3a..9043777 100644
--- a/tools/scan-view/ScanView.py
+++ b/tools/scan-view/ScanView.py
@@ -18,7 +18,7 @@
 kReportColRE = re.compile('<!-- REPORTBUGCOL -->')
 kReportColRepl = '<td></td>'
 kReportBugRE = re.compile('<!-- REPORTBUG id="report-(.*)\\.html" -->')         
-kReportBugRepl = '<td class="ReportBug"><a href="report/\\1">Report Bug</a></td>'
+kReportBugRepl = '<td class="View"><a href="report/\\1">Report Bug</a></td>'
 kBugKeyValueRE = re.compile('<!-- BUG([^ ]*) (.*) -->')
 
 kReportReplacements = [(kReportColRE, kReportColRepl),
@@ -41,6 +41,7 @@
         self.server = server
         self.reporter = reporter
         self.parameters = parameters
+        self.success = False
         self.status = None
 
     def run(self):
@@ -48,32 +49,20 @@
         try:
             if self.server.options.debug:
                 print >>sys.stderr, "%s: SERVER: submitting bug."%(sys.argv[0],)
-            result = self.reporter.fileReport(self.report, self.parameters)
+            self.status = self.reporter.fileReport(self.report, self.parameters)
+            self.success = True
             time.sleep(3)
             if self.server.options.debug:
                 print >>sys.stderr, "%s: SERVER: submission complete."%(sys.argv[0],)
         except Reporter.ReportFailure,e:
-            s = StringIO.StringIO()
-            print >>s,'Submission Failed<br><pre>'
-            print >>s,e.value
-            print >>s,'</pre>'
-            self.status = s.getvalue()
-            return            
+            self.status = e.value
         except Exception,e:
             s = StringIO.StringIO()
             import traceback
-            print >>s,'Submission Failed<br><pre>'
+            print >>s,'<b>Unhandled Exception</b><br><pre>'
             traceback.print_exc(e,file=s)
             print >>s,'</pre>'
             self.status = s.getvalue()
-            return
-
-        s = StringIO.StringIO()
-        print >>s, 'Submission Complete!'
-        if result is not None:
-            print >>s, '<hr>'
-            print >>s, result
-        self.status = s.getvalue()
 
 class ScanViewServer(BaseHTTPServer.HTTPServer):
     def __init__(self, address, handler, root, reporters, options):
@@ -190,65 +179,100 @@
     def send_internal_error(self, message):
         return self.send_string('ERROR: %s'%(message,), 'text/plain')
 
-    def send_report_submit(self):
-        s = StringIO.StringIO()
-        report = self.fields.get('report')
-        reporter = self.fields.get('reporter')
+    def submit_bug(self):
         title = self.fields.get('title')
         description = self.fields.get('description')
+        report = self.fields.get('report')
+        reporter = self.fields.get('reporter')
+
+        # Type check form parameters.
+        reportPath = posixpath.join(self.server.root,
+                                   'report-%s.html' % report)
+        if not posixpath.exists(reportPath):
+            return (False, "Invalid report ID.")
+        if not title:
+            return (False, "Missing title.")
+        if not description:
+            return (False, "Missing description.")
+        try:
+            reporter = int(reporter)
+        except:
+            return (False, "Invalid report method.")
         
         # Get the reporter and parameters.
-        reporter = self.server.reporters[int(reporter)]
+        reporter = self.server.reporters[reporter]
         parameters = {}
         for o in reporter.getParameterNames():
             name = '%s_%s'%(reporter.getName(),o)
-            parameters[o] = self.fields.get(name)
+            if name not in self.fields:
+                return (False, 
+                        'Missing field "%s" for %s report method.'%(name,
+                                                                    reporter.getName()))
+            parameters[o] = self.fields[name]
 
         # Create the report.
-        path = os.path.join(self.server.root, 'report-%s.html'%report)
-        files = [path]
-        br = Reporter.BugReport(title, description, files)
+        bug = Reporter.BugReport(title, description, [reportPath])
 
-        # Send back an initial response and wait for the report to
-        # finish.
-        initial_response = """<html>
-<head>
-  <title>Filing Report</title>
-  <link rel="stylesheet" type="text/css" href="/scanview.css" />
-</head>
-<body>
-<h1>Filing Report</h1>
-<b>Report</b>: %(report)s<br>
-<b>Title</b>: %(title)s<br>
-<b>Description</b>: %(description)s<br>
-<hr>
-Submission in progress."""%locals()
-
-        self.send_response(200)
-        self.send_header("Content-type", 'text/html')
-        self.end_headers()
-        self.wfile.write(initial_response)
-        self.wfile.flush()
-        
         # Kick off a reporting thread.
-        t = ReporterThread(br, reporter, parameters, self.server)
+        t = ReporterThread(bug, reporter, parameters, self.server)
         t.start()
 
         # Wait for thread to die...
         while t.isAlive():
-            self.wfile.write('.')
-            self.wfile.flush()
             time.sleep(.25)
         submitStatus = t.status
 
-        end_response = """<br>
-%(submitStatus)s
+        return (t.success, t.status)
+
+    def send_report_submit(self):
+        title = self.fields.get('title')
+        description = self.fields.get('description')
+
+        res,message = self.submit_bug()
+
+        if res:
+            statusClass = 'SubmitOk'
+            statusName = 'Succeeded'
+        else:
+            statusClass = 'SubmitFail'
+            statusName = 'Failed'
+
+        result = """
+<head>
+  <title>Report Submission</title>
+  <link rel="stylesheet" type="text/css" href="/scanview.css" />
+</head>
+<body>
+<h1>Report Submission</h1>
+<form name="form" action="">
+<table class="form">
+<tr><td>
+<table class="form_group">
+<tr>
+  <td class="form_clabel">Title:</td>
+  <td class="form_value">
+    <input type="text" name="title" size="50" value="%(title)s" disabled>
+  </td>
+</tr>
+<tr>
+  <td class="form_label">Description:</td>
+  <td class="form_value">
+<textarea rows="10" cols="80" name="description" disabled>
+%(description)s
+</textarea>
+  </td>
+</table>
+</td></tr>
+</table>
+</form>
+<h1 class="%(statusClass)s">Submission %(statusName)s</h1>
+%(message)s
+<p>
 <hr>
-<a href="/">Home</a>
+<a href="/">Return to Summary</a>
 </body>
-</html>
-"""%locals()
-        return self.send_string(end_response, headers=False)
+</html>"""%locals()
+        return self.send_string(result)
 
     def send_report(self, report):
         try:
