diff --git a/rwthdns.go b/rwthdns.go
index b07574b58153dfaa0b0f13bc0f72a5c9f8a562c1..210d5fbf461f6f97b1a756db7adf1ebf64df6276 100644
--- a/rwthdns.go
+++ b/rwthdns.go
@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"net/http"
 	"net/url"
+	"strings"
 	"time"
 )
 
@@ -81,16 +82,12 @@ func (c *Client) do(method string, endpoint string, params url.Values) (*http.Re
 		c.Client = http.DefaultClient
 	}
 
-	u, err := url.Parse(ApiBase + endpoint)
-	if err != nil {
-		return nil, err
-	}
-	u.RawQuery = params.Encode()
-
-	r, err := http.NewRequest(method, u.String(), nil)
+	r, err := http.NewRequest(method, ApiBase+endpoint,
+		strings.NewReader(params.Encode()))
 	if err != nil {
 		return nil, err
 	}
+	r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
 	r.Header.Set("PRIVATE-TOKEN", c.ApiToken)
 
 	res, err := c.Client.Do(r)
@@ -100,7 +97,7 @@ func (c *Client) do(method string, endpoint string, params url.Values) (*http.Re
 func (c *Client) ListZones(search *string) ([]Zone, error) {
 	q := url.Values{}
 	if search != nil {
-		q.Set("search", url.QueryEscape(*search))
+		q.Set("search", *search)
 	}
 
 	res, err := c.do("GET", "list_zones", q)
@@ -117,10 +114,10 @@ func (c *Client) ListZones(search *string) ([]Zone, error) {
 func (c *Client) ListRecords(zone *int, search *string) ([]Record, error) {
 	q := url.Values{}
 	if zone != nil {
-		q.Add("zone_id", url.QueryEscape(fmt.Sprintf("%d", *zone)))
+		q.Add("zone_id", fmt.Sprintf("%d", *zone))
 	}
 	if search != nil {
-		q.Add("search", url.QueryEscape(*search))
+		q.Add("search", *search)
 	}
 
 	res, err := c.do("GET", "list_records", q)
@@ -136,7 +133,7 @@ func (c *Client) ListRecords(zone *int, search *string) ([]Record, error) {
 
 func (c *Client) DeployZone(zone int) (Zone, error) {
 	q := url.Values{}
-	q.Set("zone_id", url.QueryEscape(fmt.Sprintf("%d", zone)))
+	q.Set("zone_id", fmt.Sprintf("%d", zone))
 
 	res, err := c.do("POST", "deploy_zone", q)
 	if err != nil {
@@ -151,7 +148,7 @@ func (c *Client) DeployZone(zone int) (Zone, error) {
 
 func (c *Client) CreateRecord(content string) (Record, error) {
 	q := url.Values{}
-	q.Set("record_content", url.QueryEscape(content))
+	q.Set("record_content", content)
 
 	res, err := c.do("POST", "create_record", q)
 	if err != nil {
@@ -166,8 +163,8 @@ func (c *Client) CreateRecord(content string) (Record, error) {
 
 func (c *Client) UpdateRecord(record int, content string) (Record, error) {
 	q := url.Values{}
-	q.Set("record_id", url.QueryEscape(fmt.Sprintf("%d", record)))
-	q.Set("record_content", url.QueryEscape(content))
+	q.Set("record_id", fmt.Sprintf("%d", record))
+	q.Set("record_content", content)
 
 	res, err := c.do("POST", "update_record", q)
 	if err != nil {
@@ -182,7 +179,7 @@ func (c *Client) UpdateRecord(record int, content string) (Record, error) {
 
 func (c *Client) DestroyRecord(record int) (Record, error) {
 	q := url.Values{}
-	q.Set("record_id", url.QueryEscape(fmt.Sprintf("%d", record)))
+	q.Set("record_id", fmt.Sprintf("%d", record))
 
 	res, err := c.do("DELETE", "destroy_record", q)
 	if err != nil {
@@ -197,7 +194,7 @@ func (c *Client) DestroyRecord(record int) (Record, error) {
 
 func (c *Client) RestoreRecord(record int) (Record, error) {
 	q := url.Values{}
-	q.Set("record_id", url.QueryEscape(fmt.Sprintf("%d", record)))
+	q.Set("record_id", fmt.Sprintf("%d", record))
 
 	res, err := c.do("POST", "restore_record", q)
 	if err != nil {