diff -r b172c383dbce -r ffda12be2e9f server/msplanner.py --- a/server/msplanner.py Wed Feb 09 18:06:13 2011 +0100 +++ b/server/msplanner.py Wed Feb 09 18:06:17 2011 +0100 @@ -519,6 +519,16 @@ invariant = getattr(lhs, '_q_invariant', False) # XXX NOT NOT neged = srel.neged(traverse_scope=True) or (rel and rel.neged(strict=True)) + has_copy_based_source = False + sources_ = [] + for source in sources: + if source.copy_based_source: + has_copy_based_source = True + if not self.system_source in sources_: + sources_.append(self.system_source) + else: + sources_.append(source) + sources = sources_ if neged: for source in sources: if invariant and source is self.system_source: @@ -535,7 +545,8 @@ if rel is None or (len(var.stinfo['relations']) == 2 and not var.stinfo['selected']): self._remove_source_term(self.system_source, var) - if not (len(sources) > 1 or usesys or invariant): + if not (has_copy_based_source or len(sources) > 1 + or usesys or invariant): if rel is None: srel.parent.remove(srel) else: