} // constructor

        public void addObservation(Document document)
        {
            _observationCounter.incrementAndGet();
            Dictionary <String, object> values = document.getValues();
            HashSet <KeyValuePair <object, object> > entries = new HashSet <KeyValuePair <object, object> >();

            foreach (String k in values.Keys)
            {
                entries.Add(new KeyValuePair <object, object>(k, values[k]));
            }
            foreach (KeyValuePair <object, object> entry in entries)
            {
                Object key = entry.Key;
                if (key != null)
                {
                    String column = key.ToString();
                    Object value  = entry.Value;
                    InferentialColumnBuilder columnBuilder = (InferentialColumnBuilder)getColumnBuilder(column);
                    columnBuilder.addObservation(value);
                }
            }
        } // addObservation()