diff --git a/apigee_sync.go b/apigee_sync.go
index 10745de..a78b0ab 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -36,6 +36,9 @@
  *  Then, poll for changes
  */
 func bootstrap() {
+	if isOfflineMode && apidInfo.LastSnapshot == "" {
+		log.Panic("Offline mode requires existent snapshot info in default DB.")
+	}
 
 	if apidInfo.LastSnapshot != "" {
 		snapshot := startOnLocalSnapshot(apidInfo.LastSnapshot)
diff --git a/changes.go b/changes.go
index 993613f..6358307 100644
--- a/changes.go
+++ b/changes.go
@@ -362,3 +362,14 @@
 	}
 	return nil
 }
+
+type offlineChangeManager struct {
+}
+
+func (o *offlineChangeManager) close() <-chan bool {
+	c := make(chan bool, 1)
+	c <- true
+	return c
+}
+
+func (o *offlineChangeManager) pollChangeWithBackoff() {}
diff --git a/init.go b/init.go
index 1ad67fd..6b1be34 100644
--- a/init.go
+++ b/init.go
@@ -22,6 +22,7 @@
 	"time"
 
 	"github.com/30x/apid-core"
+	"strings"
 )
 
 const (
@@ -34,14 +35,21 @@
 	configApidClusterId       = "apigeesync_cluster_id"
 	configSnapshotProtocol    = "apigeesync_snapshot_proto"
 	configName                = "apigeesync_instance_name"
-	ApigeeSyncEventSelector   = "ApigeeSync"
-
+	configOnlineMode          = "apigeesync_online"
 	// special value - set by ApigeeSync, not taken from configuration
 	configApidInstanceID = "apigeesync_apid_instance_id"
 	// This will not be needed once we have plugin handling tokens.
 	configBearerToken = "apigeesync_bearer_token"
 )
 
+const (
+	ApigeeSyncEventSelector = "ApigeeSync"
+)
+
+const (
+	offlineMode = "offline"
+)
+
 var (
 	/* All set during plugin initialization */
 	log                 apid.LogService
@@ -54,6 +62,7 @@
 	apidChangeManager   changeManager
 	apidSnapshotManager snapShotManager
 	httpclient          *http.Client
+	isOfflineMode       bool
 
 	/* Set during post plugin initialization
 	 * set this as a default, so that it's guaranteed to be valid even if postInitPlugins isn't called
@@ -77,6 +86,7 @@
 func initConfigDefaults() {
 	config.SetDefault(configPollInterval, 120*time.Second)
 	config.SetDefault(configSnapshotProtocol, "sqlite")
+	config.SetDefault(configOnlineMode, "online")
 	name, errh := os.Hostname()
 	if (errh != nil) && (len(config.GetString(configName)) == 0) {
 		log.Errorf("Not able to get hostname for kernel. Please set '%s' property in config", configName)
@@ -127,15 +137,24 @@
 }
 
 func createManagers() {
-	apidSnapshotManager = createSnapShotManager()
-	apidChangeManager = createChangeManager()
+	if isOfflineMode {
+		apidSnapshotManager = &offlineSnapshotManager{}
+		apidChangeManager = &offlineChangeManager{}
+	} else {
+		apidSnapshotManager = createSnapShotManager()
+		apidChangeManager = createChangeManager()
+	}
+
 	apidTokenManager = createSimpleTokenManager()
 }
 
 func checkForRequiredValues() error {
+	required := []string{configProxyServerBaseURI, configConsumerKey, configConsumerSecret}
+	if !isOfflineMode {
+		required = append(required, configSnapServerBaseURI, configChangeServerBaseURI)
+	}
 	// check for required values
-	for _, key := range []string{configProxyServerBaseURI, configConsumerKey, configConsumerSecret,
-		configSnapServerBaseURI, configChangeServerBaseURI} {
+	for _, key := range required {
 		if !config.IsSet(key) {
 			return fmt.Errorf("Missing required config value: %s", key)
 		}
@@ -160,6 +179,10 @@
 	config = services.Config()
 	initConfigDefaults()
 
+	if strings.EqualFold(config.GetString(configOnlineMode), offlineMode) {
+		isOfflineMode = true
+	}
+
 	err := checkForRequiredValues()
 	if err != nil {
 		return err
diff --git a/snapshot.go b/snapshot.go
index 3040b24..90c03a2 100644
--- a/snapshot.go
+++ b/snapshot.go
@@ -343,3 +343,24 @@
 func handleSnapshotServerError(err error) {
 	log.Debugf("Error connecting to snapshot server: %v", err)
 }
+
+type offlineSnapshotManager struct {
+}
+
+func (o *offlineSnapshotManager) close() <-chan bool {
+	c := make(chan bool, 1)
+	c <- true
+	return c
+}
+
+func (o *offlineSnapshotManager) downloadBootSnapshot() {}
+
+func (o *offlineSnapshotManager) storeBootSnapshot(snapshot *common.Snapshot) {}
+
+func (o *offlineSnapshotManager) downloadDataSnapshot() {}
+
+func (o *offlineSnapshotManager) storeDataSnapshot(snapshot *common.Snapshot) {}
+
+func (o *offlineSnapshotManager) downloadSnapshot(isBoot bool, scopes []string, snapshot *common.Snapshot) error {
+	return nil
+}
