wrote a better interface method, matrix-like