diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
new file mode 100644
index 00000000..f3e502d1
--- /dev/null
+++ b/.idea/jsLibraryMappings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/All_Tests.xml b/.idea/runConfigurations/All_Tests.xml
new file mode 100644
index 00000000..ac11209e
--- /dev/null
+++ b/.idea/runConfigurations/All_Tests.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Controller_Tests.xml b/.idea/runConfigurations/Controller_Tests.xml
new file mode 100644
index 00000000..16c24846
--- /dev/null
+++ b/.idea/runConfigurations/Controller_Tests.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/DI_Tests.xml b/.idea/runConfigurations/DI_Tests.xml
new file mode 100644
index 00000000..5c5345d7
--- /dev/null
+++ b/.idea/runConfigurations/DI_Tests.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Hooked_Tests.xml b/.idea/runConfigurations/Hooked_Tests.xml
new file mode 100644
index 00000000..592565a1
--- /dev/null
+++ b/.idea/runConfigurations/Hooked_Tests.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Routing_Tests.xml b/.idea/runConfigurations/Routing_Tests.xml
new file mode 100644
index 00000000..3790ba95
--- /dev/null
+++ b/.idea/runConfigurations/Routing_Tests.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 9bf5a491..b6251cab 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,17 +1,13 @@
-
-
-
+
+
+
-
-
-
-
+
+
-
-
@@ -32,26 +28,38 @@
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -121,8 +129,11 @@
-
+
+
+
+
@@ -320,7 +331,7 @@
1481236071442
-
+
1481237183504
@@ -329,7 +340,14 @@
1481237183504
-
+
+ 1481378740441
+
+
+
+ 1481378740441
+
+
@@ -365,21 +383,31 @@
-
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
+
@@ -389,7 +417,6 @@
-
@@ -505,14 +532,6 @@
-
-
-
-
-
-
-
-
@@ -524,13 +543,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/src/http/fatal_error.dart b/lib/src/http/fatal_error.dart
new file mode 100644
index 00000000..665751d2
--- /dev/null
+++ b/lib/src/http/fatal_error.dart
@@ -0,0 +1,8 @@
+/// Thrown whenever Angel completely fails to respond to a request.
+class AngelFatalError {
+ var error;
+ StackTrace stack;
+
+ AngelFatalError({this.error, this.stack});
+}
+
diff --git a/lib/src/http/response_context.dart b/lib/src/http/response_context.dart
index c3e870da..ec7b7d5a 100644
--- a/lib/src/http/response_context.dart
+++ b/lib/src/http/response_context.dart
@@ -151,7 +151,6 @@ class ResponseContext extends Extensible {
// UserController@show
List split = action.split("@");
- // Todo: AngelResponseException
if (split.length < 2)
throw new Exception(
"Controller redirects must take the form of 'Controller@action'. You gave: $action");
diff --git a/lib/src/http/server.dart b/lib/src/http/server.dart
index 5efb940b..b810b825 100644
--- a/lib/src/http/server.dart
+++ b/lib/src/http/server.dart
@@ -6,16 +6,15 @@ import 'dart:math' show Random;
import 'dart:mirrors';
import 'package:angel_route/angel_route.dart';
import 'package:json_god/json_god.dart' as god;
-import 'package:shelf/shelf.dart' as shelf;
import 'angel_base.dart';
import 'angel_http_exception.dart';
import 'controller.dart';
+import 'fatal_error.dart';
import 'request_context.dart';
import 'response_context.dart';
import 'routable.dart';
import 'service.dart';
export 'package:container/container.dart';
-part 'server_shelved.dart';
final RegExp _straySlashes = new RegExp(r'(^/+)|(/+$)');
@@ -31,10 +30,14 @@ typedef Future AngelConfigurer(AngelBase app);
/// A powerful real-time/REST/MVC server class.
class Angel extends AngelBase {
- var _afterProcessed = new StreamController.broadcast();
- var _beforeProcessed = new StreamController.broadcast();
- var _fatalErrorStream = new StreamController