Index: remit/finance_core/views.py
===================================================================
--- remit/finance_core/views.py	(revision 8a0d18c6daffb3d698e978cbccdd4bf093e56d26)
+++ remit/finance_core/views.py	(revision c968555fdb383841ea0d428b329c6646c2acf034)
@@ -16,14 +16,14 @@
     line_items = finance_core.models.LineItem.objects.all()
     compute_method = 'default'
+    if 'compute_method' in request.REQUEST:
+        compute_method = request.REQUEST['compute_method']
 
     # Main limit to lineitems, relative to primary axis
-    main_lineitem_limit_primary = Q()
-    if 'compute_method' in request.REQUEST:
-        compute_method = request.REQUEST['compute_method']
+    main_lineitem_limits_primary = []
     if 'term' in request.REQUEST and not request.REQUEST['term'] == 'all':
         term_obj = get_object_or_404(finance_core.models.BudgetTerm, slug=request.REQUEST['term'])
         term_name = term_obj.name
         line_items = line_items.filter(budget_term=term_obj)
-        main_lineitem_limit_primary = Q(lineitem__budget_term=term_obj)
+        main_lineitem_limits_primary.append(Q(lineitem__budget_term=term_obj))
     else:
         term_obj = None
@@ -33,5 +33,18 @@
     else:
         base_area_obj = finance_core.models.BudgetArea.get_by_path(['Accounts'])
-    line_items = line_items.filter(budget_area__in=base_area_obj.get_descendants())
+    all_relevant_areas = base_area_obj.get_descendants()
+    line_items = line_items.filter(budget_area__in=all_relevant_areas)
+    main_lineitem_limits_primary.append(Q(lineitem__budget_area__in=all_relevant_areas))
+    if 'layer' in request.REQUEST and request.REQUEST['layer'] != 'all':
+        try:
+            layer_id = int(request.REQUEST['layer'])
+            layer = finance_core.models.get_layer_by_num(layer_id)
+        except KeyError:
+            raise Http404("Invalid layer %s request" % request.REQUEST['layer'])
+        line_items = line_items.filter(layer=layer_id)
+        main_lineitem_limits_primary.append(Q(lineitem__layer=layer_id))
+    else:
+        layer = 'all'
+    main_lineitem_limit_primary = Q(*main_lineitem_limits_primary)
 
     # Initialize the axis
@@ -82,4 +95,5 @@
 
     term_options = finance_core.models.BudgetTerm.objects.all()
+    area_options = finance_core.models.BudgetArea.objects.filter(always=True)
     context = {
         'pagename':'reporting',
@@ -87,4 +101,7 @@
         'term_options': term_options,
         'area': base_area_obj,
+        'area_options': area_options,
+        'layer': layer,
+        'layer_options': finance_core.models.layers,
         'axes': finance_core.reporting.axes,
         'primary_name': primary_name,
Index: remit/remit_templates/finance_core/reporting.html
===================================================================
--- remit/remit_templates/finance_core/reporting.html	(revision 8a0d18c6daffb3d698e978cbccdd4bf093e56d26)
+++ remit/remit_templates/finance_core/reporting.html	(revision c968555fdb383841ea0d428b329c6646c2acf034)
@@ -15,10 +15,19 @@
     <td><select name='term'>
     <option {% ifequal term_name "All" %}selected {% endifequal %}value='all'>All</option>
-    {% for term_opt in term_options %}<option {% ifequal term_name term_opt.name %}selected {% endifequal %}value={{term_opt.slug}}>{{term_opt.name}}</option>{% endfor %}
+    {% for term_opt in term_options %}<option {% ifequal term_name term_opt.name %}selected {% endifequal %}value='{{term_opt.slug}}'>{{term_opt.name}}</option>{% endfor %}
     </select></td>
 </tr>
 <tr>
     <th>Budget Area</th>
-    <td>{{area}}</td>
+    <td><select name='area'>
+    {% for area_opt in area_options %}<option {%ifequal area area_opt %}selected {%endifequal%}value='{{area_opt.pk}}'>{{area_opt.indented_name}}</option>{%endfor%}
+    </select></td>
+</tr>
+<tr>
+    <th>Layer</th>
+    <td><select name='layer'>
+    <option {%ifequal layer "all"%}selected {%endifequal%}value='all'>All</option>
+    {% for layer_opt in layer_options %}<option {%ifequal layer layer_opt %}selected {%endifequal%}value='{{layer_opt|layer_num}}'>{{layer_opt|layer_name}}</option>{%endfor%}
+    </select></td>
 </tr>
 <tr>
Index: remit/util/templatetags/misc.py
===================================================================
--- remit/util/templatetags/misc.py	(revision f114f8bb2e70d64e4c1d94449d637a86e1e7d924)
+++ remit/util/templatetags/misc.py	(revision c968555fdb383841ea0d428b329c6646c2acf034)
@@ -1,3 +1,4 @@
 from django import template
+import finance_core.models
 
 register = template.Library()
@@ -22,2 +23,5 @@
         if num == value: return name.lower()
     else: return value
+
+register.filter('layer_num', finance_core.models.layer_num)
+register.filter('layer_name', finance_core.models.layer_name)
