public Saveable loadObject() throws Exception {
    //I.say("Loading object...") ;
    final int loadID = in.readInt() ;
    if (loadID == -1) return null ;
    //I.say("Loading object of ID: "+loadID) ;
    
    Saveable loaded = loadIDs.get(loadID) ;
    if (loaded != null) {
      //I.say("Loading existing object: "+loaded) ;
      if (loaded == MARK_LOCK) {
        //  Hopefully this can't happen now...
        I.complain(
          "LOADING HAS HIT A SELF-REFERENTIAL LOOP CONDITION..."
        ) ;
      }
      else {
        return loaded ;
      }
    }
    //
    //  We use the MARK_LOCK Object as a placeholder to check if a given
    //  Saveable is being referred to before it can be cached, indicating a
    //  self-referential loop condition.
    loadIDs.put(lastObjectID = loadID, MARK_LOCK) ;
    final Object loadMethod = loadMethod(loadInt()) ;
    Class loadClass = null ;
    final int initBytes = bytesIn ;
    try {
      if (loadMethod instanceof Constructor) {
        final Constructor loadObject = (Constructor) loadMethod ;
        loadClass = loadObject.getDeclaringClass() ;
        //I.say("Loading new object of type "+loadClass.getName()) ;
        loaded = (Saveable) loadObject.newInstance(this) ;
      }
      else {
        final Method loadConstant = (Method) loadMethod ;
        loadClass = loadConstant.getDeclaringClass() ;
        //I.say("Loading new constant of type "+loadClass.getName()) ;
        loaded = (Saveable) loadConstant.invoke(null, this) ;
        cacheInstance(loaded) ;
      }
    }
    catch (InstantiationException e) { I.complain(
      "PROBLEM WITH "+loadClass.getName()+"\n"+
      "ALL CLASSES IMPLEMENTING SAVEABLE MUST IMPLEMENT A PUBLIC CONSTRUCTOR "+
      "TAKING THE SESSION AS IT'S SOLE ARGUMENT, OR A STATIC loadConstant("+
      "Session s) METHOD THAT RETURNS A SAVEABLE OBJECT. THANK YOU."
    ) ; }
    final Saveable cached = loadIDs.get(loadID) ;
    if (cached != loaded) I.complain(
      "PROBLEM WITH "+loadClass.getName()+"\n"+
      "ALL CLASSES IMPLEMENTING SAVEABLE SHOULD CACHE THEMSELVES USING THE "+
      "Session.cacheInstance(Saveable s) METHOD *IMMEDIATELY* AFTER BEING "+
      "INSTANCED- I.E, FIRST THING IN THE ROOT CONSTRUCTOR, BEFORE ANY "+
      "MEMBER FIELDS OR VARIABLES HAVE BEEN LOADED.  (THIS DOES NOT APPLY TO "+
      "THOSE THAT IMPLEMENT loadConstant(Session s).)  THANK YOU."
    ) ;
    bytesIn = initBytes ;
    return loaded ;
  }