diff --git a/miner/remote_agent.go b/miner/remote_agent.go
index 5c672a6e028893000a9489ee3b3038b64504481a..9e4453ce8e093dc1958179c9f12fec1e8216d2c4 100644
--- a/miner/remote_agent.go
+++ b/miner/remote_agent.go
@@ -17,6 +17,7 @@
 package miner
 
 import (
+	"errors"
 	"math/big"
 	"sync"
 	"time"
@@ -90,7 +91,7 @@ func (a *RemoteAgent) GetHashRate() (tot int64) {
 	return
 }
 
-func (a *RemoteAgent) GetWork() [3]string {
+func (a *RemoteAgent) GetWork() ([3]string, error) {
 	a.mu.Lock()
 	defer a.mu.Unlock()
 
@@ -110,9 +111,9 @@ func (a *RemoteAgent) GetWork() [3]string {
 		res[2] = common.BytesToHash(n.Bytes()).Hex()
 
 		a.work[block.HashNoNonce()] = a.currentWork
+		return res, nil
 	}
-
-	return res
+	return res, errors.New("No work available yet, don't panic.")
 }
 
 // Returns true or false, but does not indicate if the PoW was correct
diff --git a/rpc/api/eth.go b/rpc/api/eth.go
index 5199bd966d3c1258fd304d36241377918efc2440..ba87e86c655ff4aad5b612ab2939f56cc85d922e 100644
--- a/rpc/api/eth.go
+++ b/rpc/api/eth.go
@@ -563,7 +563,12 @@ func (self *ethApi) GetLogs(req *shared.Request) (interface{}, error) {
 
 func (self *ethApi) GetWork(req *shared.Request) (interface{}, error) {
 	self.xeth.SetMining(true, 0)
-	return self.xeth.RemoteMining().GetWork(), nil
+	ret, err := self.xeth.RemoteMining().GetWork()
+	if err != nil {
+		return nil, shared.NewNotReadyError("mining work")
+	} else {
+		return ret, nil
+	}
 }
 
 func (self *ethApi) SubmitWork(req *shared.Request) (interface{}, error) {
diff --git a/rpc/shared/errors.go b/rpc/shared/errors.go
index 85af1bb2f40af3ed2fcee5651abb3dd11a1aaf79..d5a7011f9190d540d42533467dd12db52a0f5d07 100644
--- a/rpc/shared/errors.go
+++ b/rpc/shared/errors.go
@@ -64,6 +64,20 @@ func NewNotImplementedError(method string) *NotImplementedError {
 	}
 }
 
+type NotReadyError struct {
+	Resource string
+}
+
+func (e *NotReadyError) Error() string {
+	return fmt.Sprintf("%s not ready", e.Resource)
+}
+
+func NewNotReadyError(resource string) *NotReadyError {
+	return &NotReadyError{
+		Resource: resource,
+	}
+}
+
 type DecodeParamError struct {
 	err string
 }
diff --git a/rpc/shared/types.go b/rpc/shared/types.go
index dd9a60aab97f8315f5b4afdb241bc39ecfe4eae8..db328234d2e694900b5b3d29700ba055aac4339d 100644
--- a/rpc/shared/types.go
+++ b/rpc/shared/types.go
@@ -92,6 +92,9 @@ func NewRpcResponse(id interface{}, jsonrpcver string, reply interface{}, err er
 	case *NotImplementedError:
 		jsonerr := &ErrorObject{-32601, err.Error()}
 		response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
+	case *NotReadyError:
+		jsonerr := &ErrorObject{-32000, err.Error()}
+		response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}
 	case *DecodeParamError, *InsufficientParamsError, *ValidationError, *InvalidTypeError:
 		jsonerr := &ErrorObject{-32602, err.Error()}
 		response = &ErrorResponse{Jsonrpc: jsonrpcver, Id: id, Error: jsonerr}