Let me take a closer look at this - I'm pretty sure we need `parameters` for the initial call but you're probably right that it's redundant for successive calls. Assuming that's the case, how does this look?

```diff
         public static IObservable<T> GetAndFlattenAllPages<T>(this IConnection connection, Uri url, IDictionary<string, string> parameters = null, string accepts = null)
         {
-            return GetPages(url, nextPageUrl => connection.GetAsync<List<T>>(nextPageUrl, parameters, accepts).ToObservable());
+            return GetPages(url, parameters, (pageUrl, pageParams) => connection.GetAsync<List<T>>(pageUrl, pageParams, accepts).ToObservable());
         }
 
-        static IObservable<T> GetPages<T>(Uri uri,
-            Func<Uri, IObservable<IResponse<List<T>>>> getPageFunc)
+        static IObservable<T> GetPages<T>(Uri uri, IDictionary<string, string> parameters,
+            Func<Uri, IDictionary<string, string>, IObservable<IResponse<List<T>>>> getPageFunc)
         {
-            return getPageFunc(uri).Expand(resp =>
+            return getPageFunc(uri, parameters).Expand(resp =>
             {
                 var nextPageUrl = resp.ApiInfo.GetNextPageUrl();
                 return nextPageUrl == null
                     ? Observable.Empty<IResponse<List<T>>>()
-                    : Observable.Defer(() => getPageFunc(nextPageUrl));
+                    : Observable.Defer(() => getPageFunc(nextPageUrl, null));
             })
             .Where(resp => resp != null)
             .SelectMany(resp => resp.BodyAsObject);
```