Index: bin/stamps
===================================================================
--- bin/stamps	(revision 55)
+++ bin/stamps	(revision 61)
@@ -21,13 +21,14 @@
     # Call the proper methods, based on the given parameters
     if args.timeline:
-        s.timeline(args.customer, args.filter)
+        s.timeline(args.customer, args.filter, args.description)
     elif args.delete:
         s.remove_stamps(args.delete)
     elif args.graph:
-        s.graph_stamps(args.customer, args.filter)
+        s.graph_stamps(args.customer, args.filter, args.description)
     elif args.import_file:
         s.import_stamps(args.import_file)
     elif args.push:
-        s.push_stamps(args.customer, args.filter)
+        s.push_stamps(args.customer, args.filter, args.description)
     else:
-        s.show_stamps(args.customer, args.filter, args.verbose, args.sum)
+        s.show_stamps(args.customer, args.filter, args.verbose, args.sum,
+                      args.description)
Index: stamper/cli.py
===================================================================
--- stamper/cli.py	(revision 55)
+++ stamper/cli.py	(revision 61)
@@ -17,4 +17,6 @@
     parser.add_argument('-t', '--timeline', action="store_true",
                         help='Show a timeline of recorded times')
+    parser.add_argument('-desc', '--description', action="store",
+                        help='Filter results by the description in the stamp')
     parser.add_argument('-d', '--delete', action="store", type=int,
                         help='Delete up to n recorded stamps')
Index: stamper/stamper.py
===================================================================
--- stamper/stamper.py	(revision 60)
+++ stamper/stamper.py	(revision 61)
@@ -180,5 +180,5 @@
         return customers
 
-    def totals(self, filter_from=None, filter_to=None):
+    def totals(self, filter_from=None, filter_to=None, filter_descr=None):
         totals = {}
         for stamp in self.stamps:
@@ -196,4 +196,6 @@
                     # similar for the end date
                     continue
+                if filter_descr and filter_descr not in stamp['action']:
+                    continue
                 if customer not in totals:
                     totals[customer] = 0
@@ -201,5 +203,6 @@
         return totals
 
-    def details(self, filter_customer=None, filter_from=None, filter_to=None):
+    def details(self, filter_customer=None, filter_from=None, filter_to=None,
+                filter_descr=None):
         details = OrderedDict()
         totals = OrderedDict()
@@ -223,4 +226,6 @@
                 if filter_to and start > filter_to:
                     # similar for the end date
+                    continue
+                if filter_descr and filter_descr not in stamp['action']:
                     continue
                 # avoid "start" stamps
@@ -246,5 +251,5 @@
         return details, totals, total_customer
 
-    def timeline(self, customer=None, stamp_filter=None):
+    def timeline(self, customer=None, stamp_filter=None, filter_descr=None):
         filter_from, filter_to = self.validate_filter(stamp_filter)
         for stamp in self.stamps:
@@ -259,5 +264,7 @@
                 # similar for the end date
                 continue
-
+            if filter_descr and stamp['action']:
+                if filter_descr not in stamp['action']:
+                    continue
             if not stamp['customer']:
                 if customer is None:
@@ -272,5 +279,5 @@
                                 stamp['action']]))
 
-    def graph_stamps(self, customer=None, stamp_filter=None):
+    def graph_stamps(self, customer=None, stamp_filter=None, filter_descr=None):
         """
         Generate charts with information from the stamps
@@ -285,5 +292,6 @@
         details, totals, totals_customers = self.details(customer,
                                                          filter_from,
-                                                         filter_to)
+                                                         filter_to,
+                                                         filter_descr)
         days = []
         values = {}
@@ -324,5 +332,5 @@
 
     def show_stamps(self, customer=None, stamp_filter=None, verbose=False,
-        sum=False):
+        sum=False, filter_descr=None):
         filter_from, filter_to = self.validate_filter(stamp_filter)
 
@@ -332,5 +340,6 @@
             details, totals, total_customer = self.details(customer,
                                                            filter_from,
-                                                           filter_to)
+                                                           filter_to,
+                                                           filter_descr)
             for day in details:
                 print('------ %(day)s ------' % {'day': day})
@@ -349,5 +358,5 @@
 
         # now calculate the totals and show them
-        totals = self.totals(filter_from, filter_to)
+        totals = self.totals(filter_from, filter_to, filter_descr)
         if customer:
             seconds=totals.get(customer, 0)
@@ -431,5 +440,5 @@
         print('[warning] remember to review the resulting stamps file')
 
-    def push_stamps(self, customer=None, stamp_filter=None):
+    def push_stamps(self, customer=None, stamp_filter=None, filter_descr=None):
         filter_from, filter_to = self.validate_filter(stamp_filter)
 
@@ -449,4 +458,6 @@
                 if filter_to and start > filter_to:
                     # similar for the end date
+                    continue
+                if filter_descr and filter_descr not in stamp['action']:
                     continue
                 stamps.append(stamp)
