      }
      
  private:
-@@ -497,7 +497,7 @@
-         std::vector<boost::tuple<charge, size_t> > state(mps.length());
+@@ -494,10 +495,10 @@
+         using std::sqrt;
+         size_t N = sqrt(double(phys_rho_dims[0][0].second));
+         
+-        std::vector<boost::tuple<charge, size_t> > state(mps.length());
++        std::vector<boost::tuple<charge, std::size_t> > state(mps.length());
          for (int i=0; i<mps.length(); ++i)
              state[i] = boost::make_tuple(C, occupation[i] + occupation[i]*N);
 -        mps = state_mps<Matrix>(state, phys_rho_dims, site_type);

         if (mps[mps.length()-1].col_dim()[0].first != right_end)
             throw std::runtime_error("Initial state does not satisfy total quantum numbers.");
     }

     }
     
 private:
@@ -510,7 +511,7 @@
 class basis_mps_init_generic : public mps_initializer<Matrix, SymmGroup>
 {
 public:
-    typedef std::vector<boost::tuple<typename SymmGroup::charge, size_t> > state_type;
+    typedef std::vector<boost::tuple<typename SymmGroup::charge, std::size_t> > state_type;
     basis_mps_init_generic(BaseParameters & params,
                            std::vector<Index<SymmGroup> > const& phys_dims_,
                            typename SymmGroup::charge right_end_,
@@ -546,7 +547,7 @@
         if (mps.length() != state.size())
             throw std::runtime_error("Size of the initial state does not match the MPS size.");
         
