func (self *Client) Store(bucket string, returnBody bool, data *Data) (*Data, error) {
        // check if the key exists for conditional put/post
        path :=  ""
        returnData := Data{}
        resp := http.Response{}
        // check if the key exists
        if data.value == "" {
                return &returnData, errors.New("RGO: no value defined for the key")
        }
        if data.key != "" {
                // put
                path = fmt.Sprintf("/buckets/%s/keys/%s",bucket,data.key)
                if returnBody {
                        path = path + "?returnbody=true"
                }
                values := url.Values{data.key:{data.value}}
                err := self.query("PUT",path,values,&resp)
                if err != nil {
                        return &returnData, err
                }
        } else {
                //post
                path = fmt.Sprintf("/buckets/%s/keys",bucket)
                if returnBody {
                        path = path + "?returnbody=true"
                }
                values := url.Values{"":{data.value}}
                err := self.query("POST",path,values,&resp)
                if err != nil {
                        return &returnData, err
                }
        }

func (self *Client) query(method string, path string, values url.Values, r *http.Response) (error) {
        // construct the base URL
        riakurl := fmt.Sprintf("%s:%d",self.Address,self.Port)
        endpoint, err := url.Parse(riakurl)
        if err != nil {
                return err
        }
        endpoint.Path = path
        if method == "GET" {
                endpoint.RawQuery = values.Encode()
        }

        var body io.Reader
        if method != "GET" && values != nil {
                body = strings.NewReader(values.Encode())
        }

        if self.Log {
                fmt.Println("R before mod : ", r)
                fmt.Println("RGO :", method, endpoint.String())
                fmt.Println(values.Encode())
        }

        request, err := http.NewRequest(method, endpoint.String(), body)
        if err != nil {
                return err
        }

        response, err := http.DefaultClient.Do(request)
        r = response
        if self.Log {
                fmt.Println("RESPONSE : ", response)
                fmt.Println("R : ", r)
        }