ugly implement version