diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
index f3dbcc1..5e293a9 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,6 @@
 	private ArrayList dependents;
 
 	private LazyData lazyData;
-	private long lazyTimeStamp;
 
 	public BundleDescriptionImpl() {
 		// 
@@ -383,7 +382,6 @@
 	void setFullyLoaded(boolean fullyLoaded) {
 		if (fullyLoaded) {
 			stateBits |= FULLY_LOADED;
-			lazyTimeStamp = System.currentTimeMillis();
 		} else {
 			stateBits &= ~FULLY_LOADED;
 		}
@@ -412,8 +410,10 @@
 	private void fullyLoad() {
 		if ((stateBits & LAZY_LOADED) == 0)
 			return;
-		if (isFullyLoaded())
+		if (isFullyLoaded()) {
+			containingState.getReader().setAccessedFlag(true); // set reader accessed flag
 			return;
+		}
 		try {
 			containingState.getReader().fullyLoad(this);
 		} catch (IOException e) {
@@ -436,10 +436,10 @@
 		lazyData.resolvedImports = newImports;
 	}
 
-	void unload(long currentTime, long expireTime) {
+	void unload() {
 		if ((stateBits & LAZY_LOADED) == 0)
 			return;
-		if (!isFullyLoaded() || (currentTime - lazyTimeStamp - expireTime) <= 0)
+		if (!isFullyLoaded())
 			return;
 		setFullyLoaded(false);
 		LazyData tempData = lazyData;
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
index 66b1273..cb275ba 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -568,12 +568,15 @@
 	}
 
 	public void unloadLazyData(long expireTime) {
-		long currentTime = System.currentTimeMillis();
-		BundleDescription[] bundles = getBundles();
 		// make sure no other thread is trying to unload or load
 		synchronized (reader) {
+			if (reader.getAccessedFlag()) {
+				reader.setAccessedFlag(false); // reset accessed flag
+				return;
+			}
+			BundleDescription[] bundles = getBundles();
 			for (int i = 0; i < bundles.length; i++)
-				((BundleDescriptionImpl) bundles[i]).unload(currentTime, expireTime);
+				((BundleDescriptionImpl) bundles[i]).unload();
 		}
 	}
 
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java
index ad66a26..49d2896 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/StateReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,6 +33,7 @@
 
 	private boolean lazyLoad = true;
 	private int numBundles;
+	private boolean accessedFlag = false;
 
 	public static final byte STATE_CACHE_VERSION = 22;
 	public static final byte NULL = 0;
@@ -468,7 +469,16 @@
 		return lazyLoad;
 	}
 
+	boolean getAccessedFlag() {
+		return accessedFlag;
+	}
+
+	void setAccessedFlag(boolean accessedFlag) {
+		this.accessedFlag = accessedFlag;
+	}
+
 	synchronized void fullyLoad() {
+		setAccessedFlag(true);
 		DataInputStream in = null;
 		try {
 			in = openLazyFile();
@@ -487,6 +497,7 @@
 	}
 
 	synchronized void fullyLoad(BundleDescriptionImpl target) throws IOException {
+		setAccessedFlag(true);
 		DataInputStream in = null;
 		try {
 			in = openLazyFile();
