public final V bf_v_trans() {
		if (!(this instanceof VList)) {
			return this;
		}
		final List<V> list = this.listValue();
        final int len = list.size();
        if (len<2) {
            return this;
        }
        ArrayList<ArrayList<V>> ret = null;
        for (int i=0; i<len; i++) {
            final V elem = list.get(i);
            if(elem instanceof VList) {
                final List<V> listElem = elem.listValue();
                if (ret==null) {
                    /* create new list. number of elements = number of elements of one original vector element.
                     * each of the entries is a list the size of the original list
                     */
                    final int newlen = listElem.size();
                    ret = new ArrayList<ArrayList<V>>(newlen);
                    for (int j=0; j<newlen; j++) {
                        ret.add(new ArrayList<V>(len));
                    }
                }
                final int lenToAdd = listElem.size();
                if (lenToAdd!=ret.size())
                    throw new Error ("matrix expected");
                
                for (int j=0; j<lenToAdd;j++) {
                    final ArrayList<V> listToAdd = ret.get(j);
                    listToAdd.add(listElem.get(j));
                }
            } else { //any scalar in there -> unchanged result
            	return this;
            }
        }
        ArrayList<V> trueret = new ArrayList<V>(ret.size());
        for (ArrayList<V> onerow : ret) {
        	V row = V.getInstance(onerow);
        	trueret.add(row);
        }
        return getInstance(trueret);
	}