public function subOidWalk($oid, $position, $elements = 1) {
        if ($this->cache() && ( $rtn = $this->getCache()->load($oid) ) !== null) {
            return $rtn;
        }

        $this->_lastResult = $this->realWalk($oid);

        if ($this->_lastResult === false) {
            $this->close();
            throw new Exception('Could not perform walk for OID ' . $oid);
        }

        $result = array();

        foreach ($this->_lastResult as $_oid => $value) {
            $oids = explode('.', $_oid);

            $index = $oids[$position];
            for ($pos = $position + 1; $pos < sizeof($oids) && ( $elements == -1 || $pos < $position + $elements ); $pos++) {
                $index .= '.' . $oids[$pos];
            }

            $result[$index] = $this->parseSnmpValue($value);
        }

        return $this->getCache()->save($oid, $result);
    }