diff --git a/client.go b/client.go
index 08c9f588873839351415c8e50872e30804dc5914..e406bed0b1780e86eeae5312d4ed8d2a53143815 100644
--- a/client.go
+++ b/client.go
@@ -506,12 +506,10 @@ func (c *Client) dispatch(codec ServerCodec) {
 
 	// Spawn the initial read loop.
 	go c.read(codec)
-
 	for {
 		select {
 		case <-c.close:
 			return
-
 		// Read path:
 		case op := <-c.readOp:
 			if op.batch {
diff --git a/service.go b/service.go
index c75f313aaeed60da3466a09cb3e5ae50a2ebe33f..d062149d27dc138acda76734d54e3121487ade6a 100644
--- a/service.go
+++ b/service.go
@@ -19,6 +19,7 @@ package jrpc
 import (
 	"context"
 	"reflect"
+	"runtime"
 	"unicode"
 )
 
@@ -93,18 +94,18 @@ func (e *callback) ServeRPC(w ResponseWriter, r *Request) {
 		fullargs = append(fullargs, reflect.ValueOf(r.ctx))
 	}
 	fullargs = append(fullargs, args...)
-	// Catch panic while running the callback.
-	//defer func() {
-	//	if err := recover(); err != nil {
-	//		const size = 64 << 10
-	//		buf := make([]byte, size)
-	//		buf = buf[:runtime.Stack(buf, false)]
-	//		log.Error().Str("method", r.msg.Method).Interface("err", err).Hex("buf", buf).Msg("crashed")
-	//		//		errRes := errors.New("method handler crashed: " + fmt.Sprint(err))
-	//		w.Send(nil, nil)
-	//		return
-	//	}
-	//}()
+	//Catch panic while running the callback.
+	defer func() {
+		if err := recover(); err != nil {
+			const size = 64 << 10
+			buf := make([]byte, size)
+			buf = buf[:runtime.Stack(buf, false)]
+			//log.Error().Str("method", r.msg.Method).Interface("err", err).Hex("buf", buf).Msg("crashed")
+			//		errRes := errors.New("method handler crashed: " + fmt.Sprint(err))
+			w.Send(nil, nil)
+			return
+		}
+	}()
 	// Run the callback.
 	results := e.fn.Call(fullargs)
 	if e.errPos >= 0 && !results[e.errPos].IsNil() {