diff --git a/src/service/fn_service.rs b/src/service/fn_service.rs
index 6eee6c9b..07c9df3a 100644
--- a/src/service/fn_service.rs
+++ b/src/service/fn_service.rs
@@ -6,7 +6,7 @@ use futures::{
 };
 use tower_service::{NewService, Service};
 
-use super::IntoNewService;
+use super::{IntoNewService, IntoService};
 
 pub struct FnService<F, Req, Resp, E, Fut>
 where
@@ -68,6 +68,16 @@ where
     }
 }
 
+impl<F, Req, Resp, Err, Fut> IntoService<FnService<F, Req, Resp, Err, Fut>> for F
+where
+    F: Fn(Req) -> Fut + 'static,
+    Fut: IntoFuture<Item = Resp, Error = Err>,
+{
+    fn into_service(self) -> FnService<F, Req, Resp, Err, Fut> {
+        FnService::new(self)
+    }
+}
+
 pub struct FnNewService<F, Req, Resp, Err, IErr, Fut>
 where
     F: Fn(Req) -> Fut,
diff --git a/src/service/mod.rs b/src/service/mod.rs
index e6580f4d..250accf3 100644
--- a/src/service/mod.rs
+++ b/src/service/mod.rs
@@ -103,15 +103,15 @@ pub trait NewServiceExt: NewService {
     }
 }
 
-impl<T: Service> ServiceExt for T {}
-impl<T: NewService> NewServiceExt for T {}
+impl<T: ?Sized> ServiceExt for T where T: Service {}
+impl<T: ?Sized> NewServiceExt for T where T: NewService {}
 
-/// Trait for types that can be converted to a Service
+/// Trait for types that can be converted to a `Service`
 pub trait IntoService<T>
 where
     T: Service,
 {
-    /// Create service
+    /// Convert to a `Service`
     fn into_service(self) -> T;
 }
 
@@ -120,7 +120,7 @@ pub trait IntoNewService<T>
 where
     T: NewService,
 {
-    /// Create service
+    /// Convert to an `NewService`
     fn into_new_service(self) -> T;
 }
 
@@ -141,13 +141,3 @@ where
         self
     }
 }
-
-impl<F, Req, Resp, Err, Fut> IntoService<FnService<F, Req, Resp, Err, Fut>> for F
-where
-    F: Fn(Req) -> Fut + 'static,
-    Fut: IntoFuture<Item = Resp, Error = Err>,
-{
-    fn into_service(self) -> FnService<F, Req, Resp, Err, Fut> {
-        FnService::new(self)
-    }
-}