diff --git a/driver_library/include/ethosu.hpp b/driver_library/include/ethosu.hpp
index fe3dc83..98e6969 100644
--- a/driver_library/include/ethosu.hpp
+++ b/driver_library/include/ethosu.hpp
@@ -131,8 +131,8 @@
     Device(const char *device = "/dev/ethosu0");
     virtual ~Device();
 
-    int ioctl(unsigned long cmd, void *data = nullptr);
-    Capabilities capabilities();
+    int ioctl(unsigned long cmd, void *data = nullptr) const;
+    Capabilities capabilities() const;
 
 private:
     int fd;
@@ -140,13 +140,13 @@
 
 class Buffer {
 public:
-    Buffer(Device &device, const size_t capacity);
+    Buffer(const Device &device, const size_t capacity);
     virtual ~Buffer();
 
     size_t capacity() const;
-    void clear();
-    char *data();
-    void resize(size_t size, size_t offset = 0);
+    void clear() const;
+    char *data() const;
+    void resize(size_t size, size_t offset = 0) const;
     size_t offset() const;
     size_t size() const;
 
@@ -160,7 +160,7 @@
 
 class Network {
 public:
-    Network(Device &device, std::shared_ptr<Buffer> &buffer);
+    Network(const Device &device, std::shared_ptr<Buffer> &buffer);
     virtual ~Network();
 
     int ioctl(unsigned long cmd, void *data = nullptr);
@@ -180,7 +180,7 @@
 class Inference {
 public:
     template <typename T>
-    Inference(std::shared_ptr<Network> &network,
+    Inference(const std::shared_ptr<Network> &network,
               const T &ifmBegin,
               const T &ifmEnd,
               const T &ofmBegin,
@@ -193,7 +193,7 @@
         create(counterConfigs, false);
     }
     template <typename T, typename U>
-    Inference(std::shared_ptr<Network> &network,
+    Inference(const std::shared_ptr<Network> &network,
               const T &ifmBegin,
               const T &ifmEnd,
               const T &ofmBegin,
@@ -214,12 +214,12 @@
 
     virtual ~Inference();
 
-    int wait(int64_t timeoutNanos = -1);
-    const std::vector<uint32_t> getPmuCounters();
-    uint64_t getCycleCounter();
-    bool failed();
-    int getFd();
-    std::shared_ptr<Network> getNetwork();
+    int wait(int64_t timeoutNanos = -1) const;
+    const std::vector<uint32_t> getPmuCounters() const;
+    uint64_t getCycleCounter() const;
+    bool failed() const;
+    int getFd() const;
+    const std::shared_ptr<Network> getNetwork() const;
     std::vector<std::shared_ptr<Buffer>> &getIfmBuffers();
     std::vector<std::shared_ptr<Buffer>> &getOfmBuffers();
 
@@ -230,7 +230,7 @@
     std::vector<uint32_t> initializeCounterConfig();
 
     int fd;
-    std::shared_ptr<Network> network;
+    const std::shared_ptr<Network> network;
     std::vector<std::shared_ptr<Buffer>> ifmBuffers;
     std::vector<std::shared_ptr<Buffer>> ofmBuffers;
 };
diff --git a/driver_library/src/ethosu.cpp b/driver_library/src/ethosu.cpp
index 29cb77e..32d179a 100644
--- a/driver_library/src/ethosu.cpp
+++ b/driver_library/src/ethosu.cpp
@@ -208,11 +208,11 @@
     eclose(fd);
 }
 
-int Device::ioctl(unsigned long cmd, void *data) {
+int Device::ioctl(unsigned long cmd, void *data) const {
     return eioctl(fd, cmd, data);
 }
 
-Capabilities Device::capabilities() {
+Capabilities Device::capabilities() const {
     ethosu_uapi_device_capabilities uapi;
     (void)eioctl(fd, ETHOSU_IOCTL_CAPABILITIES_REQ, static_cast<void *>(&uapi));
 
@@ -230,7 +230,7 @@
  * Buffer
  ****************************************************************************/
 
-Buffer::Buffer(Device &device, const size_t capacity) : fd(-1), dataPtr(nullptr), dataCapacity(capacity) {
+Buffer::Buffer(const Device &device, const size_t capacity) : fd(-1), dataPtr(nullptr), dataCapacity(capacity) {
     ethosu_uapi_buffer_create uapi = {static_cast<uint32_t>(dataCapacity)};
     fd                             = device.ioctl(ETHOSU_IOCTL_BUFFER_CREATE, static_cast<void *>(&uapi));
 
@@ -254,15 +254,15 @@
     return dataCapacity;
 }
 
-void Buffer::clear() {
+void Buffer::clear() const {
     resize(0, 0);
 }
 
-char *Buffer::data() {
+char *Buffer::data() const {
     return dataPtr + offset();
 }
 
-void Buffer::resize(size_t size, size_t offset) {
+void Buffer::resize(size_t size, size_t offset) const {
     ethosu_uapi_buffer uapi;
     uapi.offset = offset;
     uapi.size   = size;
@@ -289,7 +289,7 @@
  * Network
  ****************************************************************************/
 
-Network::Network(Device &device, shared_ptr<Buffer> &buffer) : fd(-1), buffer(buffer) {
+Network::Network(const Device &device, shared_ptr<Buffer> &buffer) : fd(-1), buffer(buffer) {
     // Create buffer handle
     ethosu_uapi_network_create uapi;
     uapi.fd = buffer->getFd();
@@ -403,7 +403,7 @@
     return ETHOSU_PMU_EVENT_MAX;
 }
 
-int Inference::wait(int64_t timeoutNanos) {
+int Inference::wait(int64_t timeoutNanos) const {
     struct pollfd pfd;
     pfd.fd      = fd;
     pfd.events  = POLLIN | POLLERR;
@@ -422,7 +422,7 @@
     return eppoll(&pfd, 1, &tmo_p, NULL);
 }
 
-bool Inference::failed() {
+bool Inference::failed() const {
     ethosu_uapi_result_status uapi;
 
     eioctl(fd, ETHOSU_IOCTL_INFERENCE_STATUS, static_cast<void *>(&uapi));
@@ -430,7 +430,7 @@
     return uapi.status != ETHOSU_UAPI_STATUS_OK;
 }
 
-const std::vector<uint32_t> Inference::getPmuCounters() {
+const std::vector<uint32_t> Inference::getPmuCounters() const {
     ethosu_uapi_result_status uapi;
     std::vector<uint32_t> counterValues = std::vector<uint32_t>(ETHOSU_PMU_EVENT_MAX, 0);
 
@@ -445,7 +445,7 @@
     return counterValues;
 }
 
-uint64_t Inference::getCycleCounter() {
+uint64_t Inference::getCycleCounter() const {
     ethosu_uapi_result_status uapi;
 
     eioctl(fd, ETHOSU_IOCTL_INFERENCE_STATUS, static_cast<void *>(&uapi));
@@ -453,11 +453,11 @@
     return uapi.pmu_count.cycle_count;
 }
 
-int Inference::getFd() {
+int Inference::getFd() const {
     return fd;
 }
 
-shared_ptr<Network> Inference::getNetwork() {
+const shared_ptr<Network> Inference::getNetwork() const {
     return network;
 }
 
