diff --git a/dc/arista-proxy/BUILD.bazel b/dc/arista-proxy/BUILD.bazel
index fb7ec6a..e337068 100644
--- a/dc/arista-proxy/BUILD.bazel
+++ b/dc/arista-proxy/BUILD.bazel
@@ -12,7 +12,7 @@
         "//dc/arista-proxy/proto:go_default_library",
         "//go/mirko:go_default_library",
         "@com_github_golang_glog//:go_default_library",
-        "@com_github_ybbus_jsonrpc//:go_default_library",
+        "@com_github_q3k_cursedjsonrpc//:go_default_library",
         "@org_golang_google_grpc//codes:go_default_library",
         "@org_golang_google_grpc//status:go_default_library",
     ],
diff --git a/dc/arista-proxy/main.go b/dc/arista-proxy/main.go
index ccd1046..ed4a9b3 100644
--- a/dc/arista-proxy/main.go
+++ b/dc/arista-proxy/main.go
@@ -6,7 +6,7 @@
 
 	"code.hackerspace.pl/hscloud/go/mirko"
 	"github.com/golang/glog"
-	"github.com/ybbus/jsonrpc"
+	"github.com/q3k/cursedjsonrpc"
 
 	pb "code.hackerspace.pl/hscloud/dc/arista-proxy/proto"
 )
@@ -16,7 +16,7 @@
 )
 
 type aristaClient struct {
-	rpc jsonrpc.RPCClient
+	rpc cursedjsonrpc.RPCClient
 }
 
 func (c *aristaClient) structuredCall(res interface{}, command ...string) error {
@@ -46,7 +46,7 @@
 	flag.Parse()
 
 	arista := &aristaClient{
-		rpc: jsonrpc.NewClient(flagAristaAPI),
+		rpc: cursedjsonrpc.NewClient(flagAristaAPI),
 	}
 
 	m := mirko.New()
diff --git a/dc/arista-proxy/proto/arista.proto b/dc/arista-proxy/proto/arista.proto
index 2874f70..3bd254d 100644
--- a/dc/arista-proxy/proto/arista.proto
+++ b/dc/arista-proxy/proto/arista.proto
@@ -23,6 +23,27 @@
 };
 
 message ShowEnvironmentTemperatureResponse {
+    message TemperatureSensor {
+        bool in_alert_state = 1;
+        double max_temperature = 2;
+        string rel_pos = 3;
+        string description = 4;
+        string name = 5;
+        int64 alert_count = 6;
+        double current_temperature = 7;
+        double overheat_threshold = 8;
+        double critical_threshold = 9;
+        string hw_status = 10;
+    };
+    message PowerSupplySlot {
+        string ent_physical_class = 1;
+        string rel_pos = 2;
+        repeated TemperatureSensor temperature_sensors = 3;
+    };
+    string system_status = 1;
+    bool shutdown_on_overheat = 2;
+    repeated PowerSupplySlot power_supply_slots = 3;
+    repeated TemperatureSensor temperature_sensors = 4;
 };
 
 service AristaProxy {
diff --git a/dc/arista-proxy/service.go b/dc/arista-proxy/service.go
index 3144ff7..2d404a6 100644
--- a/dc/arista-proxy/service.go
+++ b/dc/arista-proxy/service.go
@@ -56,7 +56,7 @@
 type temperatureSensor struct {
 	InAlertState       bool    `json:"inAlertState"`
 	MaxTemperature     float64 `json:"maxTemperature"`
-	RelPos             int64   `json:"relPos"`
+	RelPos             string  `json:"relPos"`
 	Description        string  `json:"description"`
 	Name               string  `json:"name"`
 	AlertCount         int64   `json:"alertCount"`
@@ -66,12 +66,27 @@
 	HwStatus           string  `json:"hwStatus"`
 }
 
+func (t *temperatureSensor) Proto() *pb.ShowEnvironmentTemperatureResponse_TemperatureSensor {
+	return &pb.ShowEnvironmentTemperatureResponse_TemperatureSensor{
+		InAlertState:       t.InAlertState,
+		MaxTemperature:     t.MaxTemperature,
+		RelPos:             t.RelPos,
+		Description:        t.Description,
+		Name:               t.Name,
+		AlertCount:         t.AlertCount,
+		CurrentTemperature: t.CurrentTemperature,
+		OverheatThreshold:  t.OverheatThreshold,
+		CriticalThreshold:  t.CriticalThreshold,
+		HwStatus:           t.HwStatus,
+	}
+}
+
 func (s *server) ShowEnvironmentTemperature(ctx context.Context, req *pb.ShowEnvironmentTemperatureRequest) (*pb.ShowEnvironmentTemperatureResponse, error) {
 	var response []struct {
-		PowerSuppplySlots []struct {
+		PowerSupplySlots []struct {
 			TempSensors      []temperatureSensor `json:"tempSensors"`
 			EntPhysicalClass string              `json:"entPhysicalClass"`
-			RelPos           int64               `json:"relPos"`
+			RelPos           string              `json:"relPos"`
 		} `json:"powerSupplySlots"`
 
 		ShutdownOnOverheat bool                `json:"shutdownOnOverheat"`
@@ -91,7 +106,28 @@
 	}
 
 	d := response[0]
-	glog.Infof("%+v", d)
 
-	return &pb.ShowEnvironmentTemperatureResponse{}, nil
+	res := &pb.ShowEnvironmentTemperatureResponse{
+		SystemStatus:       d.SystemStatus,
+		ShutdownOnOverheat: d.ShutdownOnOverheat,
+		PowerSupplySlots:   make([]*pb.ShowEnvironmentTemperatureResponse_PowerSupplySlot, len(d.PowerSupplySlots)),
+		TemperatureSensors: make([]*pb.ShowEnvironmentTemperatureResponse_TemperatureSensor, len(d.TempSensors)),
+	}
+
+	for i, t := range d.TempSensors {
+		res.TemperatureSensors[i] = t.Proto()
+	}
+
+	for i, p := range d.PowerSupplySlots {
+		res.PowerSupplySlots[i] = &pb.ShowEnvironmentTemperatureResponse_PowerSupplySlot{
+			EntPhysicalClass:   p.EntPhysicalClass,
+			RelPos:             p.RelPos,
+			TemperatureSensors: make([]*pb.ShowEnvironmentTemperatureResponse_TemperatureSensor, len(p.TempSensors)),
+		}
+		for j, t := range p.TempSensors {
+			res.PowerSupplySlots[i].TemperatureSensors[j] = t.Proto()
+		}
+	}
+
+	return res, nil
 }
