This paper presents an algorithm for reverse engineering semantically sound object-oriented data models from programs written in weakly-typed languages like Cobol. Our inference is based on a novel form of guarded transitive data dependence, and improves upon prior semantics-based model inference algorithms by producing simpler, easier to understand, models, and by inferring them more efficiently.