diff --git a/commands/models.go b/commands/models.go
index 33c3793..fd820b2 100644
--- a/commands/models.go
+++ b/commands/models.go
@@ -17,10 +17,12 @@
 package commands
 
 import (
+	"context"
 	"fmt"
 	flags "github.com/jessevdk/go-flags"
 	"github.com/jhump/protoreflect/dynamic"
 	"strings"
+	"time"
 )
 
 const (
@@ -45,12 +47,13 @@
 
 type ModelUpdate struct {
 	OutputOptions
-	Unbuffered bool   `short:"u" long:"unbuffered" description:"Do not buffer console output and suppress default output processor"`
-	Filter     string `short:"f" long:"filter" description:"Comma-separated list of filters"`
-	SetFields  string `long:"set-field" description:"Comma-separated list of field=value to set"`
-	SetJSON    string `long:"set-json" description:"JSON dictionary to use for settings fields"`
-	Sync       bool   `long:"sync" description:"Synchronize before returning"`
-	Args       struct {
+	Unbuffered  bool          `short:"u" long:"unbuffered" description:"Do not buffer console output and suppress default output processor"`
+	Filter      string        `short:"f" long:"filter" description:"Comma-separated list of filters"`
+	SetFields   string        `long:"set-field" description:"Comma-separated list of field=value to set"`
+	SetJSON     string        `long:"set-json" description:"JSON dictionary to use for settings fields"`
+	Sync        bool          `long:"sync" description:"Synchronize before returning"`
+	SyncTimeout time.Duration `long:"synctimeout" default:"600s" description:"Timeout for --sync option"`
+	Args        struct {
 		ModelName ModelNameString
 	} `positional-args:"yes" required:"yes"`
 	IDArgs struct {
@@ -72,20 +75,22 @@
 
 type ModelCreate struct {
 	OutputOptions
-	Unbuffered bool   `short:"u" long:"unbuffered" description:"Do not buffer console output"`
-	SetFields  string `long:"set-field" description:"Comma-separated list of field=value to set"`
-	SetJSON    string `long:"set-json" description:"JSON dictionary to use for settings fields"`
-	Sync       bool   `long:"sync" description:"Synchronize before returning"`
-	Args       struct {
+	Unbuffered  bool          `short:"u" long:"unbuffered" description:"Do not buffer console output"`
+	SetFields   string        `long:"set-field" description:"Comma-separated list of field=value to set"`
+	SetJSON     string        `long:"set-json" description:"JSON dictionary to use for settings fields"`
+	Sync        bool          `long:"sync" description:"Synchronize before returning"`
+	SyncTimeout time.Duration `long:"synctimeout" default:"600s" description:"Timeout for --sync option"`
+	Args        struct {
 		ModelName ModelNameString
 	} `positional-args:"yes" required:"yes"`
 }
 
 type ModelSync struct {
 	OutputOptions
-	Unbuffered bool   `short:"u" long:"unbuffered" description:"Do not buffer console output and suppress default output processor"`
-	Filter     string `short:"f" long:"filter" description:"Comma-separated list of filters"`
-	Args       struct {
+	Unbuffered  bool          `short:"u" long:"unbuffered" description:"Do not buffer console output and suppress default output processor"`
+	Filter      string        `short:"f" long:"filter" description:"Comma-separated list of filters"`
+	SyncTimeout time.Duration `long:"synctimeout" default:"600s" description:"Timeout for synchronization"`
+	Args        struct {
 		ModelName ModelNameString
 	} `positional-args:"yes" required:"yes"`
 	IDArgs struct {
@@ -165,7 +170,7 @@
 		return err
 	}
 
-	models, err := ListOrFilterModels(conn, descriptor, string(options.Args.ModelName), queries)
+	models, err := ListOrFilterModels(context.Background(), conn, descriptor, string(options.Args.ModelName), queries)
 	if err != nil {
 		return err
 	}
@@ -255,13 +260,13 @@
 	if len(options.IDArgs.ID) > 0 {
 		models = make([]*dynamic.Message, len(options.IDArgs.ID))
 		for i, id := range options.IDArgs.ID {
-			models[i], err = GetModel(conn, descriptor, modelName, id)
+			models[i], err = GetModel(context.Background(), conn, descriptor, modelName, id)
 			if err != nil {
 				return err
 			}
 		}
 	} else {
-		models, err = ListOrFilterModels(conn, descriptor, modelName, queries)
+		models, err = ListOrFilterModels(context.Background(), conn, descriptor, modelName, queries)
 		if err != nil {
 			return err
 		}
@@ -300,11 +305,13 @@
 	}
 
 	if options.Sync {
+		ctx, cancel := context.WithTimeout(context.Background(), options.SyncTimeout)
+		defer cancel()
 		for i, model := range models {
 			id := model.GetFieldByName("id").(int32)
 			if modelStatusOutput.Rows[i].Message == "Updated" {
 				conditional_printf(!options.Quiet, "Wait for sync: %d ", id)
-				conn, _, err = GetModelWithRetry(conn, descriptor, modelName, id, GM_UNTIL_ENACTED|Ternary_uint32(options.Quiet, GM_QUIET, 0))
+				conn, _, err = GetModelWithRetry(ctx, conn, descriptor, modelName, id, GM_UNTIL_ENACTED|Ternary_uint32(options.Quiet, GM_QUIET, 0))
 				conditional_printf(!options.Quiet, "\n")
 				UpdateModelStatusOutput(&modelStatusOutput, i, id, "Enacted", err, true)
 			}
@@ -348,7 +355,7 @@
 	if len(options.IDArgs.ID) > 0 {
 		ids = options.IDArgs.ID
 	} else {
-		models, err := ListOrFilterModels(conn, descriptor, modelName, queries)
+		models, err := ListOrFilterModels(context.Background(), conn, descriptor, modelName, queries)
 		if err != nil {
 			return err
 		}
@@ -419,10 +426,12 @@
 	UpdateModelStatusOutput(&modelStatusOutput, 0, fields["id"], "Created", err, !options.Sync)
 
 	if options.Sync {
+		ctx, cancel := context.WithTimeout(context.Background(), options.SyncTimeout)
+		defer cancel()
 		if modelStatusOutput.Rows[0].Message == "Created" {
 			id := fields["id"].(int32)
 			conditional_printf(!options.Quiet, "Wait for sync: %d ", id)
-			conn, _, err = GetModelWithRetry(conn, descriptor, modelName, id, GM_UNTIL_ENACTED|Ternary_uint32(options.Quiet, GM_QUIET, 0))
+			conn, _, err = GetModelWithRetry(ctx, conn, descriptor, modelName, id, GM_UNTIL_ENACTED|Ternary_uint32(options.Quiet, GM_QUIET, 0))
 			conditional_printf(!options.Quiet, "\n")
 			UpdateModelStatusOutput(&modelStatusOutput, 0, id, "Enacted", err, true)
 		}
@@ -465,7 +474,7 @@
 	if len(options.IDArgs.ID) > 0 {
 		ids = options.IDArgs.ID
 	} else {
-		models, err := ListOrFilterModels(conn, descriptor, modelName, queries)
+		models, err := ListOrFilterModels(context.Background(), conn, descriptor, modelName, queries)
 		if err != nil {
 			return err
 		}
@@ -482,10 +491,13 @@
 		}
 	}
 
+	ctx, cancel := context.WithTimeout(context.Background(), options.SyncTimeout)
+	defer cancel()
+
 	modelStatusOutput := InitModelStatusOutput(options.Unbuffered, len(ids))
 	for i, id := range ids {
 		conditional_printf(!options.Quiet, "Wait for sync: %d ", id)
-		conn, _, err = GetModelWithRetry(conn, descriptor, modelName, id, GM_UNTIL_ENACTED|Ternary_uint32(options.Quiet, GM_QUIET, 0))
+		conn, _, err = GetModelWithRetry(ctx, conn, descriptor, modelName, id, GM_UNTIL_ENACTED|Ternary_uint32(options.Quiet, GM_QUIET, 0))
 		conditional_printf(!options.Quiet, "\n")
 		UpdateModelStatusOutput(&modelStatusOutput, i, id, "Enacted", err, true)
 	}
