Index: remit/finance_core/models.py
===================================================================
--- remit/finance_core/models.py	(revision 0e58ad0b68ae2408845f0b6972483df470b9f8f8)
+++ remit/finance_core/models.py	(revision dd2c3d90572fd5a82034dfa25be1b59143155a30)
@@ -12,4 +12,5 @@
     # Applicable to every term?
     always = models.BooleanField(blank=True, default=False)
+    budget_term = models.ManyToManyField('BudgetTerm', through='BudgetAreaTerm')
 
     # Contact / ACL information
Index: remit/finance_core/reporting.py
===================================================================
--- remit/finance_core/reporting.py	(revision ca035650a6d6fb1e2464cd604501afe9fc346a7b)
+++ remit/finance_core/reporting.py	(revision dd2c3d90572fd5a82034dfa25be1b59143155a30)
@@ -45,19 +45,22 @@
 
 
-def get_primary_axis(slug, base_area):
+def get_primary_axis(slug, base_area, term, ):
     if slug in axes and axes[slug][1]:
-        return axes[slug][0](base_area)
+        return axes[slug][0](base_area, term, )
     else:
         raise NotImplementedError
 
-def get_secondary_axis(slug, base_area):
+def get_secondary_axis(slug, base_area, term, ):
     if slug in axes and axes[slug][2]:
-        return axes[slug][0](base_area)
+        return axes[slug][0](base_area, term, )
     else:
         raise NotImplementedError
 
-def get_budget_areas(base_area):
+def get_budget_areas(base_area, term, ):
     name = 'Budget Areas'
     base_area_depth = base_area.depth
+    areas = base_area.get_descendants()
+    if term:
+        areas = areas.filter(Q(always=True) or Q(budget_term=term))
     axis = [
         (
@@ -67,12 +70,15 @@
             Q(lineitem__budget_area=area),
         )
-        for area in base_area.get_descendants()
+        for area in areas
     ]
-    axis_objs = base_area.get_descendants()
+    axis_objs = areas
     return name, axis, axis_objs,
 
-def get_budget_terms(base_area):
+def get_budget_terms(base_area, term, ):
     name = 'Budget Terms'
-    terms = finance_core.models.BudgetTerm.objects.all()
+    if term:
+        terms = finance_core.models.BudgetTerm.objects.filter(pk=term.pk)
+    else:
+        terms = finance_core.models.BudgetTerm.objects.all()
     axis = [
         (
@@ -86,5 +92,5 @@
     return name, axis, terms
 
-def get_layers(base_area):
+def get_layers(base_area, term, ):
     name = 'Layers'
     axis = [
Index: remit/finance_core/views.py
===================================================================
--- remit/finance_core/views.py	(revision 162f5272145ca8cefd8fb3b555e26311850a18d2)
+++ remit/finance_core/views.py	(revision dd2c3d90572fd5a82034dfa25be1b59143155a30)
@@ -15,5 +15,4 @@
 def reporting(request):
     line_items = finance_core.models.LineItem.objects.all()
-    term_name = 'All'
     compute_method = 'default'
 
@@ -27,4 +26,7 @@
         line_items = line_items.filter(budget_term=term_obj)
         main_lineitem_limit_primary = Q(lineitem__budget_term=term_obj)
+    else:
+        term_obj = None
+        term_name = 'All'
     if 'area' in request.REQUEST:
         base_area_obj = get_object_or_404(finance_core.models.BudgetArea, pk=request.REQUEST['area'])
@@ -40,5 +42,5 @@
         primary_slug = 'budget-areas'
     try:
-        primary_name, primary_axis, primary_axis_objs = finance_core.reporting.get_primary_axis(primary_slug, base_area_obj, )
+        primary_name, primary_axis, primary_axis_objs = finance_core.reporting.get_primary_axis(primary_slug, base_area_obj, term_obj, )
     except NotImplementedError:
         raise Http404("Primary axis %s is not implemented" % primary_slug)
@@ -50,5 +52,5 @@
         secondary_slug = 'layers'
     try:
-        secondary_name, secondary_axis, secondary_axis_obj = finance_core.reporting.get_secondary_axis(secondary_slug, base_area_obj, )
+        secondary_name, secondary_axis, secondary_axis_obj = finance_core.reporting.get_secondary_axis(secondary_slug, base_area_obj, term_obj, )
     except NotImplementedError:
         raise Http404("Secondary axis %s is not implemented" % secondary_slug)
