diff --git a/named-servant-client.cabal b/named-servant-client.cabal
--- a/named-servant-client.cabal
+++ b/named-servant-client.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name: named-servant-client
-version: 0.0.2
+version: 0.1.0
 synopsis: client support for named-servant
 maintainer: kristof@resonata.be
 copyright: Kristof Bastiaensen 2020
@@ -22,7 +22,7 @@
         src
    build-depends:
         base >= 4.7 && < 5,
-        servant,
-        servant-client-core,
-        named-servant,
-        named
+        servant >= 0.17 && < 0.18,
+        servant-client-core >= 0.17 && < 0.18,
+        named-servant == 0.0.3,
+        named >= 0.3 && < 0.5
diff --git a/src/Servant/Client/Named.hs b/src/Servant/Client/Named.hs
--- a/src/Servant/Client/Named.hs
+++ b/src/Servant/Client/Named.hs
@@ -17,21 +17,31 @@
 import Servant.API.Modifiers
 import Data.Proxy
 import GHC.TypeLits
+import Data.Maybe
 import Data.Functor.Identity
 import Named
 
 unarg :: NamedF f a name -> f a
 unarg (ArgF a) = a
 
+-- | type family to rewrite a named queryparam to a regular
+-- queryparam.  Useful to define instances for classes that extract
+-- information from the API type., for example servant-foreign, or
+-- servant-swagger.
+type family UnNameParam x where
+  UnNameParam (NamedQueryParams sym a) = QueryParams sym a
+  UnNameParam (NamedQueryParam' mods sym a) = QueryParam' mods sym a
+  UnNameParam (NamedQueryFlag sym) = QueryFlag sym
+
 instance (KnownSymbol sym, ToHttpApiData a, HasClient m api)
       => HasClient m (NamedQueryParams sym a :> api) where
 
   type Client m (NamedQueryParams sym a :> api) =
-    sym :! [a] -> Client m api
+    sym :? [a] -> Client m api
 
-  clientWithRoute pm Proxy req (Arg paramlist) =
-    clientWithRoute pm (Proxy :: Proxy (QueryParams sym a :> api)) req
-                    paramlist
+  clientWithRoute pm Proxy req (ArgF paramlist) =
+    clientWithRoute pm (Proxy :: Proxy (QueryParams sym a :> api)) req $
+                    fromMaybe [] paramlist
                     
   hoistClientMonad pm _ f cl as =
     hoistClientMonad pm (Proxy :: Proxy api) f (cl as)
diff --git a/src/Servant/Client/Record.hs b/src/Servant/Client/Record.hs
--- a/src/Servant/Client/Record.hs
+++ b/src/Servant/Client/Record.hs
@@ -25,7 +25,7 @@
 
 instance ( RunClient m
          , Generic a
-         , GHasClient m (Rep a ()) api) =>
+         , GHasClient m (Rep a) api) =>
          HasClient m (RecordParam a :> api)
   where
     type Client m (RecordParam a :> api) = a -> Client m api
@@ -39,28 +39,28 @@
 
 data GParam a
 
-class GHasClient m a api where
+class GHasClient m (a :: * -> *) api where
   gClientWithRoute :: RunClient m
-                   => Proxy m -> Proxy api -> Request -> a -> Client m api
+                   => Proxy m -> Proxy api -> Request -> a () -> Client m api
   gHoistClientMonad :: RunClient m
                     => Proxy m
                     -> Proxy api
                     -> (forall x. mon x -> mon' x)
-                    -> (a -> Client mon api)
-                    -> (a -> Client mon' api)
+                    -> (a () -> Client mon api)
+                    -> (a () -> Client mon' api)
 
 instance ( RunClient m
          , GHasClient m a api
          ) =>
-         HasClient m (GParam a :> api) where
-  type Client m (GParam a :> api) = a -> Client m api
+         HasClient m (GParam (a ()) :> api) where
+  type Client m (GParam (a ()) :> api) = a () -> Client m api
   clientWithRoute pm _ = gClientWithRoute pm (Proxy :: Proxy api)
   {-# INLINE clientWithRoute #-}
   hoistClientMonad pm _ = gHoistClientMonad pm (Proxy :: Proxy api)
   {-# INLINE hoistClientMonad #-}
 
-instance GHasClient m (c m2 ()) api =>
-         GHasClient m (D1 m3 (c m2) ()) api where
+instance GHasClient m c api =>
+         GHasClient m (D1 m3 c) api where
   gClientWithRoute pm _ req (M1 x) =
     gClientWithRoute pm (Proxy :: Proxy api) req x
   {-# INLINE gClientWithRoute #-}
@@ -68,8 +68,8 @@
     gHoistClientMonad pm (Proxy :: Proxy api) f (cl . M1) (unM1 x)
   {-# INLINE gHoistClientMonad #-}
 
-instance GHasClient m (a ()) (GParam (b ()) :> api)
-         => GHasClient m ((a :*: b) ()) api where
+instance GHasClient m a (GParam (b ()) :> api)
+         => GHasClient m (a :*: b) api where
   gClientWithRoute pm _ req (x :*: y) =
     gClientWithRoute pm (Proxy :: Proxy (GParam (b ()) :> api)) req x y
   {-# INLINE gClientWithRoute #-}
@@ -78,7 +78,7 @@
     (\x' y'-> cl (x' :*: y')) x y
   {-# INLINE gHoistClientMonad #-}
 
-instance GHasClient m (a ()) api => GHasClient m (C1 mon a ()) api where
+instance GHasClient m a api => GHasClient m (C1 mon a) api where
   gClientWithRoute pm _ req (M1 x) =
     gClientWithRoute pm (Proxy :: Proxy api) req x
   {-# INLINE gClientWithRoute #-}
@@ -90,7 +90,7 @@
   ( HasClient m api
   , KnownSymbol sym
   ) =>
-  GHasClient m (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 Bool) ()) api where
+  GHasClient m (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 Bool)) api where
   gClientWithRoute pm _ req (M1 (K1 x)) =
     clientWithRoute pm (Proxy :: Proxy (QueryFlag sym :> api)) req x
   {-# INLINE gClientWithRoute #-}
@@ -104,7 +104,7 @@
   , HasClient m api
   , KnownSymbol sym
   ) =>
-  GHasClient m (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 [a]) ()) api where
+  GHasClient m (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 [a])) api where
   gClientWithRoute pm _ req (M1 (K1 x)) =
     clientWithRoute pm (Proxy :: Proxy (QueryParams sym a :> api)) req x
   {-# INLINE gClientWithRoute #-}
@@ -120,7 +120,7 @@
   , KnownSymbol sym
   ) =>
   GHasClient m
-             (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 (Maybe a)) ())
+             (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 (Maybe a)))
              api where
   gClientWithRoute pm _ req (M1 (K1 x)) =
     clientWithRoute
@@ -144,7 +144,7 @@
   , KnownSymbol sym
   ) =>
   GHasClient m
-             (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 a) ())
+             (S1 ('MetaSel ('Just sym) d1 d2 d3) (Rec0 a))
              api where
   gClientWithRoute pm _ req (M1 (K1 x)) =
     clientWithRoute
