 
   public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
     let post = posts[indexPath.row]
-    let postText = post.text as NSString
-    let textFrame = postText.boundingRectWithSize(CGSize(width: UIScreen.mainScreen().bounds.width - 40,
-      height: CGFloat.max), options: .UsesLineFragmentOrigin,
-      attributes: [ NSFontAttributeName : UIFont.systemFontOfSize(14) ], context: nil)
+    var CellClass = WallTableViewCell.self
 
-    var imageHeight: CGFloat = 274
-    var imageTop: CGFloat = 60
-    if post.media.isEmpty {
-      imageHeight = 0
-      imageTop = 50
+    if let RegisteredCellClass = cells[post.reusableIdentifier] {
+      CellClass = RegisteredCellClass
     }
 
-    var informationHeight: CGFloat = 56
-    if post.likeCount == 0 && post.commentCount == 0 {
-      informationHeight = 16
-    }
-
-    let totalHeight: CGFloat = imageHeight + imageTop + informationHeight + 44 + 20 + 12 + textFrame.height
-
-    return totalHeight
+    return CellClass.height(post)
   }
 
   public func scrollViewDidScroll(scrollView: UIScrollView) {

    view.backgroundColor = UIColor.whiteColor()
    view.layer.opaque = true

    if let navigationController = navigationController {
      tableView.contentInset.top = navigationController.navigationBar.frame.height
        + UIApplication.sharedApplication().statusBarFrame.height + 20
      tableView.contentInset.bottom = 20
      tableView.scrollIndicatorInsets.top = tableView.contentInset.top - 20
    }
  }

  public override func viewDidAppear(animated: Bool) {

    tableView.opaque = true

    return tableView
    }()

  public lazy var loadingIndicator: UIActivityIndicatorView = {
