diff --git a/src/request.rs b/src/request.rs
index 8901ac8..cf775bc 100644
--- a/src/request.rs
+++ b/src/request.rs
@@ -1,4 +1,5 @@
 use http::Method;
+use serde::Serialize;
 use url::{ParseError, Url};
 
 use crate::response;
@@ -7,7 +8,7 @@ pub trait RequestBase {
     fn new(url: &'static str) -> Result<Self, ParseError>
     where
         Self: Sized;
-    fn launch(&self) -> response::Response;
+    fn launch(self) -> response::Response;
 }
 
 #[derive(Debug)]
@@ -17,7 +18,7 @@ pub struct Request {
 }
 
 impl RequestBase for Request {
-    fn new(url: &'static str) -> Result<Request, ParseError> {
+    fn new<'a>(url: &'a str) -> Result<Request, ParseError> {
         match Url::parse(url) {
             Ok(url_parsed) => Ok(Request {
                 url: url_parsed,
@@ -27,7 +28,7 @@ impl RequestBase for Request {
         }
     }
 
-    fn launch(&self) -> response::Response {
+    fn launch(self) -> response::Response {
         let client = reqwest::blocking::Client::new();
         let resp = (match self.method {
             Method::GET => client.get(self.url.as_str()),
@@ -54,8 +55,12 @@ impl RequestBase for Request {
 }
 
 impl Request {
-    pub fn method(&mut self, method: Method) -> &mut Self {
+    pub fn method(mut self, method: Method) -> Self {
         self.method = method;
         self
     }
+
+    pub fn add_attrs<T: Serialize + Sized>(self, _attrs: T) -> Self {
+        unimplemented!();
+    }
 }
diff --git a/src/selector.rs b/src/selector.rs
index e6c33d7..3e4afdd 100644
--- a/src/selector.rs
+++ b/src/selector.rs
@@ -45,7 +45,7 @@ pub trait SelectorBase {
             .unwrap()
     }
 
-    fn attr(&self, attribute: &'static str) -> Option<String> {
+    fn attr<'a>(&self, attribute: &'a str) -> Option<String> {
         let html = nipper::Document::from(self.html().as_str());
         match html.select("body > *").attr(attribute) {
             Some(text) => Some(format!("{}", text)),
@@ -67,6 +67,6 @@ impl SelectorBase for Selector {
     }
 
     fn html(&self) -> String {
-        format!("{}", self.text)
+        self.text.clone()
     }
 }
diff --git a/tests/unit_tests.rs b/tests/unit_tests.rs
index 16f3c43..605cc1a 100644
--- a/tests/unit_tests.rs
+++ b/tests/unit_tests.rs
@@ -95,8 +95,10 @@ fn xpath_test() {
     );
     assert_eq!(sel.xpath("//*[@id='text']")[0].content(), "good bye");
     assert_eq!(
-        sel.xpath("//a[contains(@href, 'localhost')]")[0].content(),
-        "link"
+        sel.xpath("//a[contains(@href, 'localhost')]")[0]
+            .attr("href")
+            .unwrap(),
+        "http://localhost"
     );
     assert_eq!(
         sel.xpath_once("//div[@class='container']/a[3]")