diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7cebec1..c84b7d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 ## 0.15.8
  * Add return type to some internal methods to improve dart2js output.
+ * Change parameter types in some public methods from dynamic (implicit or
+   explicit) to Object. In particular, the examples and args parameters on
+   Intl.message, Intl.plural, Intl.gender, and Intl.select, as well as the args
+   parameter on MessageLookup.
 
 ## 0.15.7
  * Upate to require Dart 2.0. Remove deprecated calls,
diff --git a/lib/intl.dart b/lib/intl.dart
index 0b201b5..b8abcfa 100644
--- a/lib/intl.dart
+++ b/lib/intl.dart
@@ -173,17 +173,17 @@
   /// the placeholder automatically translated.
   static String message(String message_str,
           {String desc: '',
-          Map<String, dynamic> examples: const {},
+          Map<String, Object> examples: const {},
           String locale,
           String name,
-          List args,
+          List<Object> args,
           String meaning,
           bool skip}) =>
       _message(message_str, locale, name, args, meaning);
 
   /// Omit the compile-time only parameters so dart2js can see to drop them.
   static String _message(String message_str, String locale, String name,
-      List args, String meaning) {
+      List<Object> args, String meaning) {
     return messageLookup.lookupMessage(
         message_str, locale, name, args, meaning);
   }
@@ -279,10 +279,10 @@
       String many,
       String other,
       String desc,
-      Map<String, dynamic> examples,
+      Map<String, Object> examples,
       String locale,
       String name,
-      List args,
+      List<Object> args,
       String meaning,
       bool skip}) {
     // Call our internal method, dropping examples and desc because they're not
@@ -309,7 +309,7 @@
       String other,
       String locale,
       String name,
-      List args,
+      List<Object> args,
       String meaning}) {
     // Look up our translation, but pass in a null message so we don't have to
     // eagerly evaluate calls that may not be necessary.
@@ -391,10 +391,10 @@
       String male,
       String other,
       String desc,
-      Map<String, dynamic> examples,
+      Map<String, Object> examples,
       String locale,
       String name,
-      List args,
+      List<Object> args,
       String meaning,
       bool skip}) {
     // Call our internal method, dropping args and desc because they're not used
@@ -414,10 +414,10 @@
       String male,
       String other,
       String desc,
-      Map<String, dynamic> examples,
+      Map<String, Object> examples,
       String locale,
       String name,
-      List args,
+      List<Object> args,
       String meaning}) {
     // Look up our translation, but pass in a null message so we don't have to
     // eagerly evaluate calls that may not be necessary.
@@ -453,10 +453,10 @@
   /// of an Intl.message message that is to be translated.
   static String select(Object choice, Map<String, String> cases,
       {String desc,
-      Map<String, dynamic> examples,
+      Map<String, Object> examples,
       String locale,
       String name,
-      List args,
+      List<Object> args,
       String meaning,
       bool skip}) {
     return _select(choice, cases,
@@ -464,7 +464,7 @@
   }
 
   static String _select(Object choice, Map<String, String> cases,
-      {String locale, String name, List args, String meaning}) {
+      {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
     // eagerly evaluate calls that may not be necessary.
     var translated = _message(null, locale, name, args, meaning);
diff --git a/lib/src/intl_helpers.dart b/lib/src/intl_helpers.dart
index a54609a..d284f2e 100644
--- a/lib/src/intl_helpers.dart
+++ b/lib/src/intl_helpers.dart
@@ -11,7 +11,7 @@
 import 'package:intl/intl.dart';
 
 /// Type for the callback action when a message translation is not found.
-typedef MessageIfAbsent(String message_str, List args);
+typedef MessageIfAbsent(String message_str, List<Object> args);
 
 /// This is used as a marker for a locale data map that hasn't been initialized,
 /// and will throw an exception on any usage that isn't the fallback
@@ -50,8 +50,8 @@
   String get _uninitializedMessages =>
       (_badMessages.toSet().toList()..sort()).join("\n    ");
 
-  String lookupMessage(
-      String message_str, String locale, String name, List args, String meaning,
+  String lookupMessage(String message_str, String locale, String name,
+      List<Object> args, String meaning,
       {MessageIfAbsent ifAbsent}) {
     if (throwOnFallback) {
       _badMessages.add(name ?? message_str);
@@ -76,8 +76,8 @@
 }
 
 abstract class MessageLookup {
-  String lookupMessage(
-      String message_str, String locale, String name, List args, String meaning,
+  String lookupMessage(String message_str, String locale, String name,
+      List<Object> args, String meaning,
       {MessageIfAbsent ifAbsent});
   void addLocale(String localeName, Function findLocale);
 }
