diff --git a/CHANGELOG.md b/CHANGELOG.md
index 720558a..b2f49e7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
 ## 0.16.0
  * Fix 'k' formatting (1 to 24 hours) which incorrectly showed 0 to 23.
  * Tighten up types in a couple of places.
+ * Add dart2js pragmas for inlining to help remove descriptions and other
+   compile-time information from the output.
 
 ## 0.15.8
  * Add return type to some internal methods to improve dart2js output.
diff --git a/lib/intl.dart b/lib/intl.dart
index 67453c4..1eb9f82 100644
--- a/lib/intl.dart
+++ b/lib/intl.dart
@@ -171,6 +171,10 @@
   /// the extracted message output. This can be useful to set up placeholder
   /// messages during development whose text aren't finalized yet without having
   /// the placeholder automatically translated.
+  @pragma('dart2js:tryInline')
+  // We want dart2js to try to inline these messages, but not inline the
+  // internal messages, so it will eliminate the descriptions and other
+  // information not neeeded at runtime.
   static String message(String message_str,
           {String desc: '',
           Map<String, Object> examples,
@@ -182,6 +186,7 @@
       _message(message_str, locale, name, args, meaning);
 
   /// Omit the compile-time only parameters so dart2js can see to drop them.
+  @pragma('dart2js:noInline')
   static String _message(String message_str, String locale, String name,
       List<Object> args, String meaning) {
     return messageLookup.lookupMessage(
@@ -278,6 +283,7 @@
   ///
   /// For an explanation of plurals and the [zero], [one], [two], [few], [many]
   /// categories see http://cldr.unicode.org/index/cldr-spec/plural-rules
+  @pragma('dart2js:tryInline')
   static String plural(num howMany,
       {String zero,
       String one,
@@ -309,6 +315,7 @@
         meaning: meaning);
   }
 
+  @pragma('dart2js:noInline')
   static String _plural(num howMany,
       {String zero,
       String one,
@@ -414,6 +421,7 @@
   }
 
   /// Format a message differently depending on [targetGender].
+  @pragma('dart2js:tryInline')
   static String gender(String targetGender,
       {String female,
       String male,
@@ -437,6 +445,7 @@
         meaning: meaning);
   }
 
+  @pragma('dart2js:noInline')
   static String _gender(String targetGender,
       {String female,
       String male,
@@ -488,6 +497,7 @@
   /// can't actually identify if something is an enum or not.
   ///
   /// The first argument in [args] must correspond to the [choice] Object.
+  @pragma('dart2js:tryInline')
   static String select(Object choice, Map<Object, String> cases,
       {String desc,
       Map<String, Object> examples,
@@ -500,6 +510,7 @@
         locale: locale, name: name, args: args, meaning: meaning);
   }
 
+  @pragma('dart2js:noInline')
   static String _select(Object choice, Map<Object, String> cases,
       {String locale, String name, List<Object> args, String meaning}) {
     // Look up our translation, but pass in a null message so we don't have to
