Index: src/Common/GC.cc
===================================================================
--- src/Common/GC.cc	(revision 09a1ae65b16a0d81b5e42e0db3d06d4ae0941448)
+++ src/Common/GC.cc	(revision f229fc21dea2ccacb291a92a65e5b8c8fab587c0)
@@ -23,6 +23,4 @@
 #include <cassert>
 
-// #include <csignal>
-
 GC& GC::get() {
 	static GC gc;
@@ -47,6 +45,5 @@
 	if( obj )
 	{
-		bool isMarked = obj->mark == this->mark;
-		if( !isMarked ) {
+		if( obj->mark != this->mark ) {
 			obj->mark = this->mark;
 			obj->trace( *this );
@@ -57,7 +54,6 @@
 
 void GC::register_object(GC_Object* obj) {
-	// if ( obj == (GC_Object*)0x60f00000e410ul ) std::raise( SIGTRAP );
 	(using_young ? young : old).push_back(obj);
-	obj->mark = ! this->mark;  // initialize as un-marked
+	obj->mark = !this->mark;  // initialize as un-marked
 }
 
@@ -67,5 +63,8 @@
 
 void GC::new_generation() {
-	using_young = true;
+	assert(!using_young && "Cannot start new generation when young generation already in use");
+	
+	using_young = true;  // mark young generation as in-use
+	mark = !mark;        // switch mark so aged young objects will still be unmarked in old
 }
 
@@ -78,10 +77,4 @@
 
 void GC::collect_young() {
-	// check young generation, just reset mark if not using
-	if ( ! using_young ) {
-		mark = !mark;
-		return;
-	}
-
 	// collect young gen
 	for ( GC_Object*& obj : young ) {
@@ -100,13 +93,15 @@
 	young.clear();
 
-	// reset mark for next collection
+	// reset mark to return to old generation mark
 	mark = !mark;
 }
 
 void GC::collect() {
+	// ensure not called when young gen is active
+	assert(!using_young && "Cannot do old collection when young generation is active");
+
 	// collect old gen
 	for ( GC_Object*& obj : old ) {
 		if ( obj->mark != mark ) {
-			// if ( obj == (GC_Object*)0x60f00000e410ul ) std::raise( SIGTRAP );
 			delete obj;
 			obj = nullptr;
@@ -117,6 +112,6 @@
 	old.erase( std::remove( old.begin(), old.end(), nullptr ), old.end() );
 
-	// collect young gen (also resets mark)
-	collect_young();
+	// reset mark
+	mark = !mark;
 }
 
Index: src/Common/GC.h
===================================================================
--- src/Common/GC.h	(revision 09a1ae65b16a0d81b5e42e0db3d06d4ae0941448)
+++ src/Common/GC.h	(revision f229fc21dea2ccacb291a92a65e5b8c8fab587c0)
@@ -48,5 +48,6 @@
 	void collect_young();
 
-	/// Collects all memory; use old generation afterward.
+	/// Collects old generation; use old generation afterward.
+	/// Error if currently using young generation
 	void collect();
 
