diff --git a/context.go b/context.go
index a5e24620..61b1f975 100644
--- a/context.go
+++ b/context.go
@@ -189,7 +189,7 @@ func (c *context) Render(code int, name string, data interface{}) (err error) {
 	}
 	c.response.Header().Set(ContentType, TextHTMLCharsetUTF8)
 	c.response.WriteHeader(code)
-	c.response.Write(buf.Bytes())
+	_, err = c.response.Write(buf.Bytes())
 	return
 }
 
@@ -197,7 +197,7 @@ func (c *context) Render(code int, name string, data interface{}) (err error) {
 func (c *context) HTML(code int, html string) (err error) {
 	c.response.Header().Set(ContentType, TextHTMLCharsetUTF8)
 	c.response.WriteHeader(code)
-	c.response.Write([]byte(html))
+	_, err = c.response.Write([]byte(html))
 	return
 }
 
@@ -205,7 +205,7 @@ func (c *context) HTML(code int, html string) (err error) {
 func (c *context) String(code int, s string) (err error) {
 	c.response.Header().Set(ContentType, TextPlainCharsetUTF8)
 	c.response.WriteHeader(code)
-	c.response.Write([]byte(s))
+	_, err = c.response.Write([]byte(s))
 	return
 }
 
@@ -225,7 +225,7 @@ func (c *context) JSON(code int, i interface{}) (err error) {
 func (c *context) JSONBlob(code int, b []byte) (err error) {
 	c.response.Header().Set(ContentType, ApplicationJSONCharsetUTF8)
 	c.response.WriteHeader(code)
-	c.response.Write(b)
+	_, err = c.response.Write(b)
 	return
 }
 
@@ -238,9 +238,13 @@ func (c *context) JSONP(code int, callback string, i interface{}) (err error) {
 	}
 	c.response.Header().Set(ContentType, ApplicationJavaScriptCharsetUTF8)
 	c.response.WriteHeader(code)
-	c.response.Write([]byte(callback + "("))
-	c.response.Write(b)
-	c.response.Write([]byte(");"))
+	if _, err = c.response.Write([]byte(callback + "(")); err != nil {
+		return
+	}
+	if _, err = c.response.Write(b); err != nil {
+		return
+	}
+	_, err = c.response.Write([]byte(");"))
 	return
 }
 
@@ -260,8 +264,10 @@ func (c *context) XML(code int, i interface{}) (err error) {
 func (c *context) XMLBlob(code int, b []byte) (err error) {
 	c.response.Header().Set(ContentType, ApplicationXMLCharsetUTF8)
 	c.response.WriteHeader(code)
-	c.response.Write([]byte(xml.Header))
-	c.response.Write(b)
+	if _, err = c.response.Write([]byte(xml.Header)); err != nil {
+		return
+	}
+	_, err = c.response.Write(b)
 	return
 }
 
diff --git a/echo.go b/echo.go
index a288db4b..d7d09730 100644
--- a/echo.go
+++ b/echo.go
@@ -201,7 +201,7 @@ func New() (e *Echo) {
 
 	// Logger
 	e.logger = log.New("echo")
-	e.logger.SetLevel(log.ERROR)
+	e.logger.SetLevel(log.FATAL)
 
 	return
 }
@@ -253,7 +253,7 @@ func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) {
 	if !c.Response().Committed() {
 		c.String(code, msg)
 	}
-	e.logger.Error(err)
+	e.logger.Debug(err)
 }
 
 // SetHTTPErrorHandler registers a custom Echo.HTTPErrorHandler.
diff --git a/engine/engine.go b/engine/engine.go
index 6b0f1e91..39b2d7ef 100644
--- a/engine/engine.go
+++ b/engine/engine.go
@@ -2,6 +2,7 @@ package engine
 
 import (
 	"io"
+	"mime/multipart"
 	"time"
 
 	"github.com/labstack/gommon/log"
@@ -30,6 +31,8 @@ type (
 		Method() string
 		Body() io.ReadCloser
 		FormValue(string) string
+		FormFile(string) (*multipart.FileHeader, error)
+		MultipartForm() (*multipart.Form, error)
 	}
 
 	// Response defines an interface for HTTP response.
diff --git a/engine/fasthttp/request.go b/engine/fasthttp/request.go
index 3904657e..e512692b 100644
--- a/engine/fasthttp/request.go
+++ b/engine/fasthttp/request.go
@@ -6,6 +6,7 @@ import (
 	"bytes"
 	"io"
 	"io/ioutil"
+	"mime/multipart"
 )
 
 import (
@@ -66,7 +67,15 @@ func (r *Request) Body() io.ReadCloser {
 }
 
 func (r *Request) FormValue(name string) string {
-	return ""
+	return string(r.RequestCtx.FormValue(name))
+}
+
+func (r *Request) FormFile(name string) (*multipart.FileHeader, error) {
+	return r.RequestCtx.FormFile(name)
+}
+
+func (r *Request) MultipartForm() (*multipart.Form, error) {
+	return r.RequestCtx.MultipartForm()
 }
 
 func (r *Request) reset(c *fasthttp.RequestCtx, h engine.Header, u engine.URL) {
diff --git a/engine/standard/request.go b/engine/standard/request.go
index 4f682853..f3fb744c 100644
--- a/engine/standard/request.go
+++ b/engine/standard/request.go
@@ -2,6 +2,7 @@ package standard
 
 import (
 	"io"
+	"mime/multipart"
 	"net/http"
 
 	"github.com/labstack/echo/engine"
@@ -78,6 +79,15 @@ func (r *Request) FormValue(name string) string {
 	return r.Request.FormValue(name)
 }
 
+func (r *Request) FormFile(name string) (*multipart.FileHeader, error) {
+	_, fh, err := r.Request.FormFile(name)
+	return fh, err
+}
+
+func (r *Request) MultipartForm() (*multipart.Form, error) {
+	return r.Request.MultipartForm, nil
+}
+
 func (r *Request) reset(req *http.Request, h engine.Header, u engine.URL) {
 	r.Request = req
 	r.header = h
diff --git a/test/request.go b/test/request.go
index e50204d9..92834b09 100644
--- a/test/request.go
+++ b/test/request.go
@@ -2,6 +2,7 @@ package test
 
 import (
 	"io"
+	"mime/multipart"
 	"net/http"
 
 	"github.com/labstack/echo/engine"
@@ -79,6 +80,16 @@ func (r *Request) FormValue(name string) string {
 	return r.request.FormValue(name)
 }
 
+func (r *Request) FormFile(name string) (*multipart.FileHeader, error) {
+	_, fh, err := r.request.FormFile(name)
+	return fh, err
+}
+
+func (r *Request) MultipartForm() (*multipart.Form, error) {
+	m := r.request.MultipartForm
+	return m, nil
+}
+
 func (r *Request) Object() interface{} {
 	return r.request
 }