diff --git a/examples/accesslevel/accesslevel.go b/examples/accesslevel/accesslevel.go
index 6ae51ef1..d28a7d66 100644
--- a/examples/accesslevel/accesslevel.go
+++ b/examples/accesslevel/accesslevel.go
@@ -29,7 +29,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	id, err := ua.ParseNodeID(*nodeID)
 	if err != nil {
@@ -37,19 +37,19 @@ func main() {
 	}
 
 	n := c.Node(id)
-	accessLevel, err := n.AccessLevel()
+	accessLevel, err := n.AccessLevelWithContext(ctx)
 	if err != nil {
 		log.Fatal(err)
 	}
 	log.Print("AccessLevel: ", accessLevel)
 
-	userAccessLevel, err := n.UserAccessLevel()
+	userAccessLevel, err := n.UserAccessLevelWithContext(ctx)
 	if err != nil {
 		log.Fatal(err)
 	}
 	log.Print("UserAccessLevel: ", userAccessLevel)
 
-	v, err := n.Value()
+	v, err := n.ValueWithContext(ctx)
 	switch {
 	case err != nil:
 		log.Fatal(err)
diff --git a/examples/browse/browse.go b/examples/browse/browse.go
index 6310693f..3e564a4e 100644
--- a/examples/browse/browse.go
+++ b/examples/browse/browse.go
@@ -45,13 +45,13 @@ func join(a, b string) string {
 	return a + "." + b
 }
 
-func browse(n *opcua.Node, path string, level int) ([]NodeDef, error) {
+func browse(ctx context.Context, n *opcua.Node, path string, level int) ([]NodeDef, error) {
 	// fmt.Printf("node:%s path:%q level:%d\n", n, path, level)
 	if level > 10 {
 		return nil, nil
 	}
 
-	attrs, err := n.Attributes(ua.AttributeIDNodeClass, ua.AttributeIDBrowseName, ua.AttributeIDDescription, ua.AttributeIDAccessLevel, ua.AttributeIDDataType)
+	attrs, err := n.AttributesWithContext(ctx, ua.AttributeIDNodeClass, ua.AttributeIDBrowseName, ua.AttributeIDDescription, ua.AttributeIDAccessLevel, ua.AttributeIDDataType)
 	if err != nil {
 		return nil, err
 	}
@@ -138,13 +138,13 @@ func browse(n *opcua.Node, path string, level int) ([]NodeDef, error) {
 	}
 
 	browseChildren := func(refType uint32) error {
-		refs, err := n.ReferencedNodes(refType, ua.BrowseDirectionForward, ua.NodeClassAll, true)
+		refs, err := n.ReferencedNodesWithContext(ctx, refType, ua.BrowseDirectionForward, ua.NodeClassAll, true)
 		if err != nil {
 			return errors.Errorf("References: %d: %s", refType, err)
 		}
 		// fmt.Printf("found %d child refs\n", len(refs))
 		for _, rn := range refs {
-			children, err := browse(rn, def.Path, level+1)
+			children, err := browse(ctx, rn, def.Path, level+1)
 			if err != nil {
 				return errors.Errorf("browse children: %s", err)
 			}
@@ -178,14 +178,14 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	id, err := ua.ParseNodeID(*nodeID)
 	if err != nil {
 		log.Fatalf("invalid node id: %s", err)
 	}
 
-	nodeList, err := browse(c.Node(id), "", 0)
+	nodeList, err := browse(ctx, c.Node(id), "", 0)
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/examples/crypto/crypto.go b/examples/crypto/crypto.go
index 05922697..ef80c304 100644
--- a/examples/crypto/crypto.go
+++ b/examples/crypto/crypto.go
@@ -65,7 +65,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	// Use our connection (read the server's time)
 	v, err := c.Node(ua.NewNumericNodeID(0, 2258)).Value()
diff --git a/examples/datetime/datetime.go b/examples/datetime/datetime.go
index bde0aa1b..88a865d0 100644
--- a/examples/datetime/datetime.go
+++ b/examples/datetime/datetime.go
@@ -51,9 +51,9 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
-	v, err := c.Node(ua.NewNumericNodeID(0, 2258)).Value()
+	v, err := c.Node(ua.NewNumericNodeID(0, 2258)).ValueWithContext(ctx)
 	switch {
 	case err != nil:
 		log.Fatal(err)
diff --git a/examples/history-read/history-read.go b/examples/history-read/history-read.go
index cb2a2349..2fed4a28 100644
--- a/examples/history-read/history-read.go
+++ b/examples/history-read/history-read.go
@@ -28,7 +28,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	id, err := ua.ParseNodeID(*nodeID)
 	if err != nil {
@@ -37,7 +37,7 @@ func main() {
 
 	// HistoryRead with ContinuationPoint use
 	nodesToRequest := []*ua.HistoryReadValueID{
-		&ua.HistoryReadValueID{
+		{
 			NodeID:       id,
 			DataEncoding: &ua.QualifiedName{},
 		},
@@ -54,7 +54,7 @@ func main() {
 		// Reset old nodes
 		nodesToRequest = make([]*ua.HistoryReadValueID, 0)
 
-		data, err := c.HistoryReadRawModified(nodes, &ua.ReadRawModifiedDetails{
+		data, err := c.HistoryReadRawModifiedWithContext(ctx, nodes, &ua.ReadRawModifiedDetails{
 			IsReadModified: false,
 			StartTime:      time.Now().UTC().AddDate(0, -1, 0),
 			EndTime:        time.Now().UTC().AddDate(0, 1, 0),
diff --git a/examples/method/method.go b/examples/method/method.go
index 19224087..b1cf17d7 100644
--- a/examples/method/method.go
+++ b/examples/method/method.go
@@ -28,7 +28,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	in := int64(12)
 	req := &ua.CallMethodRequest{
@@ -37,7 +37,7 @@ func main() {
 		InputArguments: []*ua.Variant{ua.MustVariant(in)},
 	}
 
-	resp, err := c.Call(req)
+	resp, err := c.CallWithContext(ctx, req)
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/examples/monitor/monitor.go b/examples/monitor/monitor.go
index 8663a0b3..4e4118ac 100644
--- a/examples/monitor/monitor.go
+++ b/examples/monitor/monitor.go
@@ -68,7 +68,7 @@ func main() {
 		log.Fatal(err)
 	}
 
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	m, err := monitor.NewNodeMonitor(c)
 	if err != nil {
diff --git a/examples/read/read.go b/examples/read/read.go
index ec50d9dd..2e5beac5 100644
--- a/examples/read/read.go
+++ b/examples/read/read.go
@@ -29,7 +29,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	id, err := ua.ParseNodeID(*nodeID)
 	if err != nil {
@@ -44,7 +44,7 @@ func main() {
 		TimestampsToReturn: ua.TimestampsToReturnBoth,
 	}
 
-	resp, err := c.Read(req)
+	resp, err := c.ReadWithContext(ctx, req)
 	if err != nil {
 		log.Fatalf("Read failed: %s", err)
 	}
diff --git a/examples/regread/regread.go b/examples/regread/regread.go
index 942f77a3..db5d1da7 100644
--- a/examples/regread/regread.go
+++ b/examples/regread/regread.go
@@ -29,14 +29,14 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	id, err := ua.ParseNodeID(*nodeID)
 	if err != nil {
 		log.Fatalf("invalid node id: %v", err)
 	}
 
-	regResp, err := c.RegisterNodes(&ua.RegisterNodesRequest{
+	regResp, err := c.RegisterNodesWithContext(ctx, &ua.RegisterNodesRequest{
 		NodesToRegister: []*ua.NodeID{id},
 	})
 	if err != nil {
@@ -46,12 +46,12 @@ func main() {
 	req := &ua.ReadRequest{
 		MaxAge: 2000,
 		NodesToRead: []*ua.ReadValueID{
-			&ua.ReadValueID{NodeID: regResp.RegisteredNodeIDs[0]},
+			{NodeID: regResp.RegisteredNodeIDs[0]},
 		},
 		TimestampsToReturn: ua.TimestampsToReturnBoth,
 	}
 
-	resp, err := c.Read(req)
+	resp, err := c.ReadWithContext(ctx, req)
 	if err != nil {
 		log.Fatalf("Read failed: %s", err)
 	}
@@ -60,7 +60,7 @@ func main() {
 	}
 	log.Print(resp.Results[0].Value.Value())
 
-	_, err = c.UnregisterNodes(&ua.UnregisterNodesRequest{
+	_, err = c.UnregisterNodesWithContext(ctx, &ua.UnregisterNodesRequest{
 		NodesToUnregister: []*ua.NodeID{id},
 	})
 	if err != nil {
diff --git a/examples/subscribe/subscribe.go b/examples/subscribe/subscribe.go
index d9fd6ce0..006cd65f 100644
--- a/examples/subscribe/subscribe.go
+++ b/examples/subscribe/subscribe.go
@@ -62,7 +62,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	notifyCh := make(chan *opcua.PublishNotificationData)
 
diff --git a/examples/translate/translate.go b/examples/translate/translate.go
index f126002c..ad4b669b 100644
--- a/examples/translate/translate.go
+++ b/examples/translate/translate.go
@@ -31,10 +31,10 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	root := c.Node(ua.NewTwoByteNodeID(id.ObjectsFolder))
-	nodeID, err := root.TranslateBrowsePathInNamespaceToNodeID(uint16(*ns), *nodePath)
+	nodeID, err := root.TranslateBrowsePathInNamespaceToNodeIDWithContext(ctx, uint16(*ns), *nodePath)
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/examples/trigger/trigger.go b/examples/trigger/trigger.go
index f1a84ade..2cc37293 100644
--- a/examples/trigger/trigger.go
+++ b/examples/trigger/trigger.go
@@ -63,7 +63,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	notifyCh := make(chan *opcua.PublishNotificationData)
 
diff --git a/examples/udt/udt.go b/examples/udt/udt.go
index cf4b0d32..7cba5163 100644
--- a/examples/udt/udt.go
+++ b/examples/udt/udt.go
@@ -59,9 +59,9 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
-	v, err := c.Node(id).Value()
+	v, err := c.Node(id).ValueWithContext(ctx)
 	switch {
 	case err != nil:
 		log.Fatal(err)
diff --git a/examples/write/write.go b/examples/write/write.go
index 54d82296..1521a6c2 100644
--- a/examples/write/write.go
+++ b/examples/write/write.go
@@ -30,7 +30,7 @@ func main() {
 	if err := c.Connect(ctx); err != nil {
 		log.Fatal(err)
 	}
-	defer c.Close()
+	defer c.CloseSessionWithContext(ctx)
 
 	id, err := ua.ParseNodeID(*nodeID)
 	if err != nil {
@@ -55,7 +55,7 @@ func main() {
 		},
 	}
 
-	resp, err := c.Write(req)
+	resp, err := c.WriteWithContext(ctx, req)
 	if err != nil {
 		log.Fatalf("Read failed: %s", err)
 	}