# File lib/big_record/base.rb, line 566
      def find_one(id, options)
        # allow to pass a record (e.g. Entity.find(@entity)) and not only a string (e.g. Entity.find("$-monkey-123"))
        unless id.is_a?(String)
          id = id.id if id and not id.is_a?(String)
        end

        # Allow the client to give us other objects than integers, e.g. Time and String
        if options[:timestamp] && options[:timestamp].kind_of?(Time)
          options[:timestamp] = options[:timestamp].to_bigrecord_timestamp
        end

        requested_columns = columns_to_find(options)

        # TODO: this is a hack... it should be done in a single call but currently hbase doesn't allow that
        raw_record =
        if options[:versions] and options[:versions] > 1
          timestamps = connection.get(table_name, id, "#{default_family}:updated_at", options)
          timestamps.collect{|timestamp| connection.get_columns(table_name, id, requested_columns, :timestamp => timestamp.to_bigrecord_timestamp)}
        else
          connection.get_columns(table_name, id, requested_columns, options)
        end

        # Instantiate the raw record (or records, if multiple versions were asked)
        if raw_record
          if raw_record.is_a?(Array)
            unless raw_record.empty?
              raw_record.collect do |r|
                add_missing_cells(r, requested_columns)
                rec = instantiate(r)
                rec.all_attributes_loaded = true if options[:view] == :all
                rec
              end
            else
              raise RecordNotFound, "Couldn't find #{name} with ID=#{id}"
            end
          else
            add_missing_cells(raw_record, requested_columns)
            rec = instantiate(raw_record)
            rec.all_attributes_loaded = true if options[:view] == :all
            rec
          end
        else
          raise RecordNotFound, "Couldn't find #{name} with ID=#{id}"
        end
      end