diff --git a/ui/fullscreen.html b/ui/fullscreen.html
index 8091bb8c..2b16e546 100755
--- a/ui/fullscreen.html
+++ b/ui/fullscreen.html
@@ -116,10 +116,8 @@ function setup(){
 	// load images...
 	// XXX not allowed...
 	//$.getJSON('images.js', loadImages})
-	// XXX STUB
-	//loadJSON(image_list)
 
-	ImageGrid.load()
+	ImageGrid.load(null, image_list)
 
 	// set the default position and init...
 	$('.current.image').click()
diff --git a/ui/gallery-prototype.js b/ui/gallery-prototype.js
index b80dd055..73790c2f 100755
--- a/ui/gallery-prototype.js
+++ b/ui/gallery-prototype.js
@@ -161,17 +161,23 @@ ImageGrid.GROUP('State',
 			group: 'API',
 			display: false,
 		},
-		function load(name){
+		function load(name, dfl_state, dfl_config){
 			if(name == null){
 				name = ''
 			} else {
 				name = '-' + name
 			}
-			loadJSON($.jStorage.get(this.option.KEY_NAME_STATE+name, {}))
+			if(dfl_state == null){
+				dfl_state = {}
+			}
+			if(dfl_config == null){
+				dfl_config = {}
+			}
+			loadJSON($.jStorage.get(this.option.KEY_NAME_STATE+name, dfl_state))
 			// NOTE: we need to load the config ACTER the state as to be 
 			// 		able to set correct state-related data like current 
 			// 		image ID...
-			this.set($.jStorage.get(this.option.KEY_NAME_CONFIG+name, {}))
+			this.set($.jStorage.get(this.option.KEY_NAME_CONFIG+name, dfl_config))
 		}),
 	ImageGrid.ACTION({
 			doc: 'Revert to last verison. if n is given then revert n versions back.\n\n'+
@@ -289,6 +295,7 @@ ImageGrid.GROUP('State',
 			value: 10,
 		}),
 	/*
+	// XXX is this the correct way to go...
 	ImageGrid.OPTION({
 			name: 'CURRENT_IMAGE_ID',
 			doc: '',
@@ -1016,18 +1023,31 @@ function setDefaultInitialState(){
 
 
 function setupEvents(){
+	var updated = false
 	// persistence...
 	$(document)
 		// main modifier events...
 		.bind('shiftImageUp shiftImageDown reverseImageOrder '+
 				'reverseRibbons shiftImageUpNewRibbon shiftImageDownNewRibbon', 
-				ImageGrid.saveState)
+				function(){
+					updated = true
+				})
 		/*
-		// XXX should this be here?
+		// navigation events...
 		.bind('nextImage prevImage nextScreenImages prevScreenImages '+
 				'focusAboveRibbon focusBelowRibbon', 
-				ImageGrid.saveState)
+				function(){
+					updated = true
+				})
 		*/
+	// save things if updated within a minute...
+	setInterval(function(){
+			if(updated){
+				ImageGrid.saveState()
+				updated = false
+			}}, 60000)
+	// autosave every ten minutes...
+	setInterval(ImageGrid.saveState, 600000)
 
 	// resize...
 	$(window).resize(function() {
@@ -1179,11 +1199,17 @@ function buildJSON(get_order){
 
 
 // XXX might be good to add images in packs here, not one by one...
-function loadJSON(data, set_order){
+function loadJSON(data, position, set_order){
+	if(position == null){
+		position = data.position
+	}
 	if(set_order == null){
 		set_order = setImageOrder
 	}
 	var ribbons = data.ribbons
+	if(ribbons == null){
+		return
+	}
 	var field = $('.field')
 
 	// drop all old content...
@@ -1201,8 +1227,8 @@ function loadJSON(data, set_order){
 				.appendTo(ribbon)
 		}
 	}
-	if(data.position != null){
-		$('#' + data.position).click()
+	if(position != null && $('#' + position).length != 0){
+		$('#' + position).click()
 	} else {
 		$('.image').first().click()
 	}
diff --git a/ui/gallery.html b/ui/gallery.html
index f088f80a..54eed5d5 100755
--- a/ui/gallery.html
+++ b/ui/gallery.html
@@ -64,9 +64,8 @@ function setup(){
 	// load images...
 	// XXX not allowed...
 	//$.getJSON('images.js', loadImages})
-	// XXX STUB
-	//loadImages(image_list)
-	loadJSON(image_list)
+
+	ImageGrid.load(null, image_list)
 
 	// set the default position and init...
 	$('.current.image').click()