diff --git a/bob/bio/base/script/resources.py b/bob/bio/base/script/resources.py
index 854dd80b2d9f72a7a7d1f1bf701a026cc634fbcf..ffeaedac6a8d6d6e9a813a5fdd4c08fc3c66c782 100644
--- a/bob/bio/base/script/resources.py
+++ b/bob/bio/base/script/resources.py
@@ -15,12 +15,14 @@ def resources(command_line_parameters = None):
 
   parser.add_argument("--details", '-d', action='store_true', help = "Prints the complete configuration for all resources")
 
+  parser.add_argument("--packages", '-p', nargs='+', help = "If given, shows only resources defined in the given package(s)")
+
   parser.add_argument("--no-strip-dummy", '-s', action = 'store_true',
                       help = "If given, the dummy elements (usually used for testing purposes only) are **not** removed from the list.")
 
   args = parser.parse_args(command_line_parameters)
 
-  kwargs = {'verbose' : args.details}
+  kwargs = {'verbose' : args.details, "packages" : args.packages}
   if args.no_strip_dummy:
     kwargs['strip'] = []
 
diff --git a/bob/bio/base/test/test_scripts.py b/bob/bio/base/test/test_scripts.py
index 92280814d50c069c45cf6b4f6e419ab6ec2556f4..57e10b908c820eca96b008dc9a41fd48eb96dcb2 100644
--- a/bob/bio/base/test/test_scripts.py
+++ b/bob/bio/base/test/test_scripts.py
@@ -369,7 +369,7 @@ def test_resources():
   # simply test that the collect_results script works
   from bob.bio.base.script.resources import resources, databases
   with utils.Quiet():
-    resources(['--types', 'database', 'preprocessor', 'extractor', 'algorithm', 'grid', '--details'])
+    resources(['--types', 'database', 'preprocessor', 'extractor', 'algorithm', 'grid', '--details', '--packages', 'bob.bio.base'])
     databases([])
 
 
diff --git a/bob/bio/base/utils/resources.py b/bob/bio/base/utils/resources.py
index f9106f40e7b97574d6e02f50e6d6099695c72643..7a2b72926b4158066aa8bcf3a3af275c382bf5c9 100644
--- a/bob/bio/base/utils/resources.py
+++ b/bob/bio/base/utils/resources.py
@@ -194,7 +194,7 @@ def resource_keys(keyword, exclude_packages=[], package_prefix='bob.bio.', strip
                  if entry_point.dist.project_name not in exclude_packages])
 
 
-def list_resources(keyword, strip=['dummy'], package_prefix='bob.bio.', verbose=False):
+def list_resources(keyword, strip=['dummy'], package_prefix='bob.bio.', verbose=False, packages=None):
   """Returns a string containing a detailed list of resources that are registered with the given keyword."""
   if keyword not in valid_keywords:
     raise ValueError("The given keyword '%s' is not valid. Please use one of %s!" % (str(keyword), str(valid_keywords)))
@@ -204,7 +204,10 @@ def list_resources(keyword, strip=['dummy'], package_prefix='bob.bio.', verbose=
   retval = ""
   length = max(len(entry_point.name) for entry_point in entry_points) if entry_points else 1
 
-  for entry_point in sorted(entry_points, key=lambda p: p.dist.project_name):
+  if packages is not None:
+    entry_points = [entry_point for entry_point in entry_points if entry_point.dist.project_name in packages]
+
+  for entry_point in sorted(entry_points, key=lambda p: (p.dist.project_name, p.name)):
     if last_dist != str(entry_point.dist):
       retval += "\n- %s @ %s: \n" % (str(entry_point.dist), str(entry_point.dist.location))
       last_dist = str(entry_point.dist)
@@ -224,7 +227,7 @@ def database_directories(strip=['dummy'], replacements = None, package_prefix='b
   entry_points = _get_entry_points('database', strip, package_prefix=package_prefix)
 
   dirs = {}
-  for entry_point in sorted(entry_points, key=lambda entry_point: entry_point.name):  
+  for entry_point in sorted(entry_points, key=lambda entry_point: entry_point.name):
     try:
       db = load_resource(entry_point.name, 'database')
       db.replace_directories(replacements)