Final version, at this point at least. Still use runOnUiThread for listener call - but it doesn't seem to slow down the application