The model for stock corporations, is to make profit. Which is not inherently wrong. However, the model is flawed because personal involvement in the company is not a requirement to be a stockholder. With the lack of personal involvement, with the lack of being informed, it is too easy for investors to choose to invest only in corporations that produce the greatest return on investment. In other words, the lack of personal involvement leads to a disconnect between an individual's motivations, and the moral outcomes of the actions of the corporation. Therefore, corporations that obtain profit tend to be rewarded, regardless of the moral cost on society.
This, in turn, tends to lead to a working environment that promotes profit above morality. A positive feedback loop is created, where individuals increasingly disregard moral judgement in favor of profit.
A possible solution, would be to outlaw investments for one who does not participate in the labor of a company, for a number of hours per month. An example model for this is called a worker cooperative. In worker cooperatives, each shareholder is only allowed one vote. Different types of worker cooperatives could exist, where an individual's greater involvement in the company would afford more than one vote (perhaps as a function of hours worked, or money invested), while still upholding the principles of self governance.
You could have individuals voting on every policy ever implemented, using voting software that would make it easier to fit voting into people's daily lives. However, not everyone is fit to vote on policy which they have little knowledge about. Not everyone has time to research policy to make an informed decision. That's why people elect representatives to do the voting for them. People are generally experts in one or few topics. The ideal would be that everyone would know everything there is to know, and would be able to vote for themselves. But chances are that many times we won't vote at all, because we have other things to do and can't keep up with the constant influx of policy that has to be voted on.
I think the closest we can get to that ideal, is for people to be able to individually select others to vote for them on whatever matters they believe the others to be experts on. For example, I want my friend Frank to vote on matters of foreign policy, because I know he likes to read about that stuff and he's a great guy and I like his value system. So I delegate my foreign policy voting to Frank. Foreign policy is a hobby for Frank. Frank delegates his foreign policy voting to someone he holds in high esteem on the matter. Every once in a while, Frank and I can override the delegation and vote for ourselves, if we disagree with our delegates.
Software exists to enable more direct involvement in government, where one can choose to vote individually, or vote on behalf of friends that confide in your decision, as a delegate. Current options include LiquidFeedback, GetOpinionated, and DemocracyOS.