diff -Naur rescue-0.50.0/programs/librescue/agent_commands.cc rescue-0.50.0.fixed/programs/librescue/agent_commands.cc
--- rescue-0.50.0/programs/librescue/agent_commands.cc	2007-06-03 16:16:18.000000000 +0430
+++ rescue-0.50.0.fixed/programs/librescue/agent_commands.cc	2007-06-06 22:50:54.000000000 +0430
@@ -139,8 +139,8 @@
 	Command::encode(out);
 	out.writeInt32(m_tempId);
 	out.writeInt32(m_id);
-	out.writeObject(m_self);
-	out.writeObjects(m_objects);
+	out.writeObject(m_self, 0);
+	out.writeObjects(m_objects, 0);
   }
 
   void AgentConnectOK::decode(InputBuffer& in) {
@@ -257,7 +257,7 @@
 	Command::encode(out);
 	out.writeInt32(m_id);
 	out.writeInt32(m_time);
-	out.writeObjects(m_objects);
+	out.writeObjects(m_objects, 0);
   }
   
   void AgentSense::decode(InputBuffer& in) {
diff -Naur rescue-0.50.0/programs/librescue/gis_commands.cc rescue-0.50.0.fixed/programs/librescue/gis_commands.cc
--- rescue-0.50.0/programs/librescue/gis_commands.cc	2007-06-03 16:16:18.000000000 +0430
+++ rescue-0.50.0.fixed/programs/librescue/gis_commands.cc	2007-06-06 22:51:26.000000000 +0430
@@ -88,7 +88,7 @@
 
   void GISConnectOK::encode(OutputBuffer& out) const {
 	Command::encode(out);
-	out.writeObjects(m_objects);
+	out.writeObjects(m_objects, 0);
   }
 
   void GISConnectOK::decode(InputBuffer& in) {
diff -Naur rescue-0.50.0/programs/librescue/output.cc rescue-0.50.0.fixed/programs/librescue/output.cc
--- rescue-0.50.0/programs/librescue/output.cc	2007-06-03 16:16:17.000000000 +0430
+++ rescue-0.50.0.fixed/programs/librescue/output.cc	2007-06-06 22:51:51.000000000 +0430
@@ -118,7 +118,7 @@
 	return m_index;
   }
 
-  Cursor OutputBuffer::writeObject(const RescueObject* object) {
+  Cursor OutputBuffer::writeObject(const RescueObject* object, int time) {
 	writeInt32(object->type());
 	Cursor base = writeInt32(0);
 	// Write the object data
@@ -126,7 +126,7 @@
 	for (int i=PROPERTY_MIN;i<=PROPERTY_MAX;++i) {
 	  const Property* prop = object->getProperty((PropertyId)i);
 	  if (prop) {
-		writeProperty(object,prop);
+		writeProperty(object,prop, time);
 	  }
 	}
 	writeInt32(PROPERTY_NULL);
@@ -134,16 +134,19 @@
 	return m_index;
   }
 
-  Cursor OutputBuffer::writeObjects(const ObjectSet& objects) {
+  Cursor OutputBuffer::writeObjects(const ObjectSet& objects, int time) {
 	for (ObjectSet::const_iterator it = objects.begin();it!=objects.end();++it) {
 	  const RescueObject* next = *it;
-	  writeObject(next);
+	  writeObject(next, time);
 	}
 	writeInt32(TYPE_NULL);
 	return m_index;
   }
 
-  Cursor OutputBuffer::writeProperty(const RescueObject* object, const Property* prop) {
+  Cursor OutputBuffer::writeProperty(const RescueObject* object, const Property* prop, int time) {
+	if (prop->lastUpdate() < time)
+		return m_index;
+
 	if (m_filter && !(m_filter->allowed(object,prop))) return m_index;
 	writeInt32(prop->type());
 	Cursor base = writeInt32(0);
diff -Naur rescue-0.50.0/programs/librescue/output.h rescue-0.50.0.fixed/programs/librescue/output.h
--- rescue-0.50.0/programs/librescue/output.h	2007-06-03 16:16:17.000000000 +0430
+++ rescue-0.50.0.fixed/programs/librescue/output.h	2007-06-06 22:53:21.000000000 +0430
@@ -57,10 +57,10 @@
 	Cursor writeCommand(const Command* command);
 	Cursor writeCommands(const CommandList* commands);
 
-	Cursor writeObject(const RescueObject* object);
-	Cursor writeObjects(const ObjectSet& objects);
+	Cursor writeObject(const RescueObject* object, int time);
+	Cursor writeObjects(const ObjectSet& objects, int time);
 
-	Cursor writeProperty(const RescueObject* object, const Property* prop);
+	Cursor writeProperty(const RescueObject* object, const Property* prop, int time);
 
 	// Fill in the "size" field - this writes the value of "cursor()-base" at location "base", then sets the cursor back to where it was.
 	Cursor writeSize(Cursor base);
diff -Naur rescue-0.50.0/programs/librescue/simulator_commands.cc rescue-0.50.0.fixed/programs/librescue/simulator_commands.cc
--- rescue-0.50.0/programs/librescue/simulator_commands.cc	2007-06-03 16:16:17.000000000 +0430
+++ rescue-0.50.0.fixed/programs/librescue/simulator_commands.cc	2007-06-06 22:52:46.000000000 +0430
@@ -88,7 +88,7 @@
   void SimulatorConnectOK::encode(OutputBuffer& out) const {
 	Command::encode(out);
 	out.writeInt32(m_id);
-	out.writeObjects(m_objects);
+	out.writeObjects(m_objects, 0);
   }
 
   void SimulatorConnectOK::decode(InputBuffer& in) {
@@ -329,7 +329,7 @@
 	Command::encode(out);
 	//	LOG_DEBUG("Writing update for time %d",m_time);
 	out.writeInt32(m_time);
-	out.writeObjects(m_objects);
+	out.writeObjects(m_objects, m_time);
   }
 
   void Update::decode(InputBuffer& in) {
@@ -407,7 +407,7 @@
 	Command::encode(out);
 	out.writeInt32(m_id);
 	out.writeInt32(m_time);
-	out.writeObjects(m_objects);
+	out.writeObjects(m_objects, m_time);
   }
 
   void KernelUpdate::decode(InputBuffer& in) {
diff -Naur rescue-0.50.0/programs/librescue/viewer_commands.cc rescue-0.50.0.fixed/programs/librescue/viewer_commands.cc
--- rescue-0.50.0/programs/librescue/viewer_commands.cc	2007-06-03 16:16:17.000000000 +0430
+++ rescue-0.50.0.fixed/programs/librescue/viewer_commands.cc	2007-06-06 22:53:38.000000000 +0430
@@ -86,7 +86,7 @@
 
   void ViewerConnectOK::encode(OutputBuffer& out) const {
 	Command::encode(out);
-	out.writeObjects(m_objects);
+	out.writeObjects(m_objects, 0);
   }
 
   void ViewerConnectOK::decode(InputBuffer& in) {
