diff --git a/pkgs/stack_trace/lib/src/frame.dart b/pkgs/stack_trace/lib/src/frame.dart
index 5f0777c..f05b469 100644
--- a/pkgs/stack_trace/lib/src/frame.dart
+++ b/pkgs/stack_trace/lib/src/frame.dart
@@ -46,6 +46,13 @@
     return path.relative(fileUriToPath(uri));
   }
 
+  /// Returns the name of the package this stack frame comes from, or `null` if
+  /// this stack frame doesn't come from a `package:` URL.
+  String get package {
+    if (uri.scheme != 'package') return null;
+    return uri.path.split('/').first;
+  }
+
   /// A human-friendly description of the code location.
   ///
   /// For Dart core libraries, this will omit the line and column information,
diff --git a/pkgs/stack_trace/lib/src/trace.dart b/pkgs/stack_trace/lib/src/trace.dart
index 1ab7695..43a598c 100644
--- a/pkgs/stack_trace/lib/src/trace.dart
+++ b/pkgs/stack_trace/lib/src/trace.dart
@@ -79,19 +79,32 @@
   String get fullStackTrace => toString();
 
   /// Returns a terser version of [this]. This is accomplished by folding
-  /// together multiple stack frames from the core library. If multiple such
-  /// frames appear in a row, only the last (the one directly called by user
-  /// code) is kept. Core library patches are also renamed to remove their
-  /// `-patch` suffix.
+  /// together multiple stack frames from the core library, as in [foldFrames].
+  /// Core library patches are also renamed to remove their `-patch` suffix.
   Trace get terse {
+    return new Trace(foldFrames((frame) => frame.isCore).frames.map((frame) {
+      if (!frame.isCore) return frame;
+      var library = frame.library.replaceAll(_patchRegExp, '');
+      return new Frame(
+          Uri.parse(library), frame.line, frame.column, frame.member);
+    }));
+  }
+
+  /// Returns a new [Trace] based on [this] where multiple stack frames matching
+  /// [predicate] are folded together. This means that whenever there are
+  /// multiple frames in a row that match [predicate], only the last one is
+  /// kept.
+  ///
+  /// This is useful for limiting the amount of library code that appears in a
+  /// stack trace by only showing user code and code that's called by user code.
+  Trace foldFrames(bool predicate(frame)) {
     var newFrames = <Frame>[];
     for (var frame in frames.reversed) {
-      if (!frame.isCore) {
+      if (!predicate(frame)) {
         newFrames.add(frame);
-      } else if (newFrames.isEmpty || !newFrames.last.isCore) {
-        var library = frame.library.replaceAll(_patchRegExp, '');
+      } else if (newFrames.isEmpty || !predicate(newFrames.last)) {
         newFrames.add(new Frame(
-            Uri.parse(library), frame.line, frame.column, frame.member));
+            frame.uri, frame.line, frame.column, frame.member));
       }
     }
 
diff --git a/pkgs/stack_trace/test/frame_test.dart b/pkgs/stack_trace/test/frame_test.dart
index c65f395..02bec68 100644
--- a/pkgs/stack_trace/test/frame_test.dart
+++ b/pkgs/stack_trace/test/frame_test.dart
@@ -139,6 +139,22 @@
     });
   });
 
+  group('.package', () {
+    test('returns null for non-package URIs', () {
+      expect(new Frame.parse('#0 Foo (dart:async:0:0)').package, isNull);
+      expect(new Frame.parse('#0 Foo '
+              '(http://dartlang.org/stuff/thing.dart:0:0)').package,
+          isNull);
+    });
+
+    test('returns the package name for package: URIs', () {
+      expect(new Frame.parse('#0 Foo (package:foo/foo.dart:0:0)').package,
+          equals('foo'));
+      expect(new Frame.parse('#0 Foo (package:foo/zap/bar.dart:0:0)').package,
+          equals('foo'));
+    });
+  });
+
   group('.toString()', () {
     test('returns the library and line/column numbers for non-core '
         'libraries', () {
diff --git a/pkgs/stack_trace/test/trace_test.dart b/pkgs/stack_trace/test/trace_test.dart
index ed8fa6b..cbbf90b 100644
--- a/pkgs/stack_trace/test/trace_test.dart
+++ b/pkgs/stack_trace/test/trace_test.dart
@@ -133,4 +133,23 @@
 dart:async      bottom
 '''));
   });
+
+  test('.foldFrames folds frames together bottom-up', () {
+    var trace = new Trace.parse('''
+#0 notFoo (foo.dart:42:21)
+#1 fooTop (bar.dart:0:2)
+#2 fooBottom (foo.dart:1:100)
+#3 alsoNotFoo (bar.dart:10:20)
+#4 fooTop (dart:io:5:10)
+#5 fooBottom (dart:async-patch:9:11)
+''');
+
+    var folded = trace.foldFrames((frame) => frame.member.startsWith('foo'));
+    expect(folded.toString(), equals('''
+foo.dart 42:21    notFoo
+foo.dart 1:100    fooBottom
+bar.dart 10:20    alsoNotFoo
+dart:async-patch  fooBottom
+'''));
+  });
 }
