diff --git a/extensions/coap/COAPLoader.h b/extensions/coap/COAPLoader.h
index 502cc8a..fc19fe6 100644
--- a/extensions/coap/COAPLoader.h
+++ b/extensions/coap/COAPLoader.h
@@ -85,6 +85,6 @@
 };
 
 extern "C" {
-	DLL_EXPORT void *createCOAPFactory(void);
+  DLL_EXPORT void *createCOAPFactory(void);
 }
 #endif /* EXTENSIONS_COAPLOADER_H_ */
diff --git a/extensions/expression-language/Expression.cpp b/extensions/expression-language/Expression.cpp
index a25e1d3..2ddc68d 100644
--- a/extensions/expression-language/Expression.cpp
+++ b/extensions/expression-language/Expression.cpp
@@ -95,15 +95,15 @@
 }
 
 Value resolve_user_id(const std::vector<Value> &args) {
-	std::string name;
-	if (args.size() == 1) {
-		name = args[0].asString();
-		if (!name.empty()) {
-			name = minifi::utils::OsUtils::userIdToUsername(name);
-		}
-	}
+  std::string name;
+  if (args.size() == 1) {
+    name = args[0].asString();
+    if (!name.empty()) {
+      name = minifi::utils::OsUtils::userIdToUsername(name);
+    }
+  }
 
-	return Value(name);
+  return Value(name);
 }
 
 Value expr_hostname(const std::vector<Value> &args) {
diff --git a/extensions/gps/GetGPS.h b/extensions/gps/GetGPS.h
index 1f2e480..bed903c 100644
--- a/extensions/gps/GetGPS.h
+++ b/extensions/gps/GetGPS.h
@@ -30,32 +30,25 @@
 namespace minifi {
 namespace processors {
 
-//! GetGPS Class
 class GetGPS : public core::Processor
 {
 public:
-	//! Constructor
-	/*!
-	 * Create a new processor
-	 */
-	GetGPS(std::string name, utils::Identifier uuid = utils::Identifier())
-	: core::Processor(name, uuid), logger_(logging::LoggerFactory<GetGPS>::getLogger())
-	{
-		gpsdHost_ = "localhost";
-		gpsdPort_ = "2947";
-		gpsdWaitTime_ = 50000000;
-	}
-	//! Destructor
-	virtual ~GetGPS() = default;
-	//! Processor Name
-	static const std::string ProcessorName;
-	//! Supported Properties
-	static core::Property GPSDHost;
-	static core::Property GPSDPort;
-	static core::Property GPSDWaitTime;
+  GetGPS(std::string name, utils::Identifier uuid = utils::Identifier())
+  : core::Processor(name, uuid), logger_(logging::LoggerFactory<GetGPS>::getLogger())
+  {
+    gpsdHost_ = "localhost";
+    gpsdPort_ = "2947";
+    gpsdWaitTime_ = 50000000;
+  }
+  virtual ~GetGPS() = default;
+  static const std::string ProcessorName;
+  // Supported Properties
+  static core::Property GPSDHost;
+  static core::Property GPSDPort;
+  static core::Property GPSDWaitTime;
 
-	//! Supported Relationships
-	static core::Relationship Success;
+  // Supported Relationships
+  static core::Relationship Success;
 
 public:
   /**
@@ -65,10 +58,10 @@
    * ProcessSession objects.
    */
   void onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &sessionFactory) override;
-	//! OnTrigger method, implemented by NiFi GetGPS
-	virtual void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
-	//! Initialize, over write by NiFi GetGPS
-	virtual void initialize(void) override;
+  //! OnTrigger method, implemented by NiFi GetGPS
+  virtual void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
+  //! Initialize, over write by NiFi GetGPS
+  virtual void initialize(void) override;
 
 protected:
 
diff --git a/extensions/http-curl/HTTPCurlLoader.h b/extensions/http-curl/HTTPCurlLoader.h
index 5d418c1..35821e0 100644
--- a/extensions/http-curl/HTTPCurlLoader.h
+++ b/extensions/http-curl/HTTPCurlLoader.h
@@ -98,6 +98,6 @@
 };
 
 extern "C" {
-	DLL_EXPORT void *createHttpCurlFactory(void);
+  DLL_EXPORT void *createHttpCurlFactory(void);
 }
 #endif /* EXTENSIONS_HTTPCURLLOADER_H_ */
diff --git a/extensions/http-curl/sitetosite/HTTPTransaction.h b/extensions/http-curl/sitetosite/HTTPTransaction.h
index e625ad6..dd267aa 100644
--- a/extensions/http-curl/sitetosite/HTTPTransaction.h
+++ b/extensions/http-curl/sitetosite/HTTPTransaction.h
@@ -43,8 +43,8 @@
 
   ~HttpTransaction(){
     auto stream = dynamic_cast< org::apache::nifi::minifi::io::HttpStream*>(  dynamic_cast<SiteToSitePeer*>(crcStream.getstream())->getStream() );
-	if (stream)
-		stream->forceClose();
+  if (stream)
+    stream->forceClose();
   }
 
   void initialize(sitetosite::SiteToSiteClient *client, const std::string &url) {
diff --git a/extensions/http-curl/tests/HTTPHandlers.h b/extensions/http-curl/tests/HTTPHandlers.h
index 1c1226f..3fd3f14 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -82,11 +82,11 @@
   }
 
   bool handleGet(CivetServer *server, struct mg_connection *conn) override {
-	
+  
 #ifdef WIN32
-	  std::string hostname = org::apache::nifi::minifi::io::Socket::getMyHostName();
+    std::string hostname = org::apache::nifi::minifi::io::Socket::getMyHostName();
 #else
-	  std::string hostname = "localhost";
+    std::string hostname = "localhost";
 #endif
     std::string site2site_rest_resp = "{\"peers\" : [{ \"hostname\": \"" + hostname + "\", \"port\": " + port + ",  \"secure\": false, \"flowFileCount\" : 0 }] }";
     std::stringstream headers;
diff --git a/extensions/jni/JVMCreator.h b/extensions/jni/JVMCreator.h
index 5b3b479..30ca0be 100644
--- a/extensions/jni/JVMCreator.h
+++ b/extensions/jni/JVMCreator.h
@@ -56,8 +56,8 @@
     }
 
     for (const auto &path : pathOrFiles) {
-		logger_->log_debug("Adding path %s", path);
-		minifi::utils::file::FileUtils::addFilesMatchingExtension(logger_, path, ".jar", classpaths_);
+      logger_->log_debug("Adding path %s", path);
+      minifi::utils::file::FileUtils::addFilesMatchingExtension(logger_, path, ".jar", classpaths_);
     }
 
   }
diff --git a/extensions/jni/jvm/JVMLoader.h b/extensions/jni/jvm/JVMLoader.h
index 53c4b79..b9fa89a 100644
--- a/extensions/jni/jvm/JVMLoader.h
+++ b/extensions/jni/jvm/JVMLoader.h
@@ -444,8 +444,8 @@
     jclass c = env->FindClass(name);
     jclass c_global = (jclass) env->NewGlobalRef(c);
     if (!c) {
-	    std::stringstream ss;
-	    ss << "Could not find " << name;
+      std::stringstream ss;
+      ss << "Could not find " << name;
       throw std::runtime_error(ss.str());
     }
     return c_global;
diff --git a/extensions/libarchive/ManipulateArchive.h b/extensions/libarchive/ManipulateArchive.h
index 3fd207b..cd46a65 100644
--- a/extensions/libarchive/ManipulateArchive.h
+++ b/extensions/libarchive/ManipulateArchive.h
@@ -39,51 +39,43 @@
 
 using logging::Logger;
 
-//! ManipulateArchive Class
 class ManipulateArchive : public core::Processor {
 public:
-	//! Constructor
-	/*!
-	 * Create a new processor
-	 */
-	ManipulateArchive(std::string name, utils::Identifier uuid = utils::Identifier())
-	: core::Processor(name, uuid),
-		logger_(logging::LoggerFactory<ManipulateArchive>::getLogger()) {
-	}
-	//! Destructor
-	virtual ~ManipulateArchive() = default;
+  ManipulateArchive(std::string name, utils::Identifier uuid = utils::Identifier())
+  : core::Processor(name, uuid),
+    logger_(logging::LoggerFactory<ManipulateArchive>::getLogger()) {
+  }
+  virtual ~ManipulateArchive() = default;
+  static constexpr char const* ProcessorName = "ManipulateArchive";
 
-	//! Processor Name
-	static constexpr char const* ProcessorName = "ManipulateArchive";
+  // Supported operations
+  static char const* OPERATION_REMOVE;
+  static char const* OPERATION_COPY;
+  static char const* OPERATION_MOVE;
+  static char const* OPERATION_TOUCH;
 
-	//! Supported operations
-	static char const* OPERATION_REMOVE;
-	static char const* OPERATION_COPY;
-	static char const* OPERATION_MOVE;
-	static char const* OPERATION_TOUCH;
+  // Supported Properties
+  static core::Property Operation;
+  static core::Property Target;
+  static core::Property Destination;
+  static core::Property Before;
+  static core::Property After;
+  // Supported Relationships
+  static core::Relationship Success;
+  static core::Relationship Failure;
 
-	//! Supported Properties
-	static core::Property Operation;
-	static core::Property Target;
-	static core::Property Destination;
-	static core::Property Before;
-	static core::Property After;
-	//! Supported Relationships
-	static core::Relationship Success;
-	static core::Relationship Failure;
-
-	//! OnTrigger method, implemented by NiFi ManipulateArchive
-	void onTrigger(core::ProcessContext *context, core::ProcessSession *session);
-	void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory);
-	//! Initialize, over write by NiFi ManipulateArchive
-	void initialize(void);
+  // OnTrigger method, implemented by NiFi ManipulateArchive
+  void onTrigger(core::ProcessContext *context, core::ProcessSession *session);
+  void onSchedule(core::ProcessContext *context, core::ProcessSessionFactory *sessionFactory);
+  // Initialize, over write by NiFi ManipulateArchive
+  void initialize(void);
 
 protected:
 
 private:
-	//! Logger
-	std::shared_ptr<Logger> logger_;
-	std::string before_, after_, operation_, destination_, targetEntry_;
+  // Logger
+  std::shared_ptr<Logger> logger_;
+  std::string before_, after_, operation_, destination_, targetEntry_;
 };
 
 REGISTER_RESOURCE(ManipulateArchive, "Performs an operation which manipulates an archive without needing to split the archive into multiple FlowFiles.");
diff --git a/extensions/mqtt/processors/PublishMQTT.cpp b/extensions/mqtt/processors/PublishMQTT.cpp
index 5aaa796..97b7d0c 100644
--- a/extensions/mqtt/processors/PublishMQTT.cpp
+++ b/extensions/mqtt/processors/PublishMQTT.cpp
@@ -75,7 +75,7 @@
     yield();
     return;
   }
-	
+  
   std::shared_ptr<core::FlowFile> flowFile = session->get();
 
   if (!flowFile) {
diff --git a/extensions/opencv/OpenCVLoader.h b/extensions/opencv/OpenCVLoader.h
index 7863e28..153e6ee 100644
--- a/extensions/opencv/OpenCVLoader.h
+++ b/extensions/opencv/OpenCVLoader.h
@@ -79,6 +79,6 @@
 };
 
 extern "C" {
-	DLL_EXPORT void *createOpenCVFactory(void);
+  DLL_EXPORT void *createOpenCVFactory(void);
 }
 #endif /* EXTENSIONS_OPENCVLOADER_H_ */
diff --git a/extensions/sftp/processors/ListSFTP.cpp b/extensions/sftp/processors/ListSFTP.cpp
index 8af8e4e..3b30611 100644
--- a/extensions/sftp/processors/ListSFTP.cpp
+++ b/extensions/sftp/processors/ListSFTP.cpp
@@ -963,12 +963,12 @@
     core::TimeUnit unit;
     if (!core::Property::StringToTime(value, entity_tracking_time_window, unit) ||
         !core::Property::ConvertTimeUnitToMS(entity_tracking_time_window, unit, entity_tracking_time_window)) {
-      /* The default is 3 hours	*/
+      /* The default is 3 hours */
       entity_tracking_time_window = 3 * 3600 * 1000;
       logger_->log_error("Entity Tracking Time Window attribute is invalid");
     }
   } else {
-    /* The default is 3 hours	*/
+    /* The default is 3 hours */
     entity_tracking_time_window = 3 * 3600 * 1000;
   }
 
diff --git a/extensions/sql/data/MaxCollector.h b/extensions/sql/data/MaxCollector.h
index 359f962..3bccf84 100644
--- a/extensions/sql/data/MaxCollector.h
+++ b/extensions/sql/data/MaxCollector.h
@@ -147,7 +147,7 @@
   size_t countColumns_{};
   bool columnsVerified_{false};
 };
-	
+  
 } /* namespace sql */
 } /* namespace minifi */
 } /* namespace nifi */
diff --git a/extensions/sql/processors/ExecuteSQL.cpp b/extensions/sql/processors/ExecuteSQL.cpp
index f9735b4..cd7975a 100644
--- a/extensions/sql/processors/ExecuteSQL.cpp
+++ b/extensions/sql/processors/ExecuteSQL.cpp
@@ -59,8 +59,8 @@
     "Note that Expression Language is not evaluated for flow file contents.")->supportsExpressionLanguage(true)->build());
 
 const core::Property ExecuteSQL::s_maxRowsPerFlowFile(
-	core::PropertyBuilder::createProperty("Max Rows Per Flow File")->isRequired(true)->withDefaultValue<int>(0)->withDescription(
-		"The maximum number of result rows that will be included intoi a flow file. If zero then all will be placed into the flow file")->supportsExpressionLanguage(true)->build());
+  core::PropertyBuilder::createProperty("Max Rows Per Flow File")->isRequired(true)->withDefaultValue<int>(0)->withDescription(
+    "The maximum number of result rows that will be included intoi a flow file. If zero then all will be placed into the flow file")->supportsExpressionLanguage(true)->build());
 
 const core::Relationship ExecuteSQL::s_success("success", "Successfully created FlowFile from SQL query result set.");
 
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.h b/extensions/windows-event-log/ConsumeWindowsEventLog.h
index b6793b4..dd6948b 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.h
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.h
@@ -43,9 +43,9 @@
 namespace processors {
 
 struct EventRender {
-	std::map<std::string, std::string> matched_fields_;
-	std::string text_;
-	std::string rendered_text_;
+  std::map<std::string, std::string> matched_fields_;
+  std::string text_;
+  std::string rendered_text_;
 };
 
 class Bookmark;
diff --git a/extensions/windows-event-log/TailEventLog.cpp b/extensions/windows-event-log/TailEventLog.cpp
index 74c4aec..aebd9b7 100644
--- a/extensions/windows-event-log/TailEventLog.cpp
+++ b/extensions/windows-event-log/TailEventLog.cpp
@@ -73,68 +73,68 @@
 
 void TailEventLog::onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) {
   
-	if (log_handle_ == nullptr) {
-		logger_->log_debug("Handle could not be created for %s", log_source_);
-	}
+  if (log_handle_ == nullptr) {
+    logger_->log_debug("Handle could not be created for %s", log_source_);
+  }
 
-	BYTE buffer[MAX_RECORD_BUFFER_SIZE];
+  BYTE buffer[MAX_RECORD_BUFFER_SIZE];
 
-	EVENTLOGRECORD *event_record = (EVENTLOGRECORD*)&buffer;
+  EVENTLOGRECORD *event_record = (EVENTLOGRECORD*)&buffer;
 
-	DWORD bytes_to_read = 0, min_bytes = 0;
-	
-	GetOldestEventLogRecord(log_handle_, &current_record_);
-	GetNumberOfEventLogRecords(log_handle_, &num_records_);
-	current_record_ = num_records_-max_events_;
-	
-	logger_->log_trace("%d and %d", current_record_, num_records_);
+  DWORD bytes_to_read = 0, min_bytes = 0;
+  
+  GetOldestEventLogRecord(log_handle_, &current_record_);
+  GetNumberOfEventLogRecords(log_handle_, &num_records_);
+  current_record_ = num_records_-max_events_;
+  
+  logger_->log_trace("%d and %d", current_record_, num_records_);
 
-	if (ReadEventLog(log_handle_,EVENTLOG_FORWARDS_READ | EVENTLOG_SEEK_READ, current_record_, event_record,MAX_RECORD_BUFFER_SIZE, &bytes_to_read,&min_bytes))
-	{
-		if (bytes_to_read == 0) {
-			logger_->log_debug("Yielding");
-			context->yield();
-		}
-		while (bytes_to_read > 0)
-		{
+  if (ReadEventLog(log_handle_,EVENTLOG_FORWARDS_READ | EVENTLOG_SEEK_READ, current_record_, event_record,MAX_RECORD_BUFFER_SIZE, &bytes_to_read,&min_bytes))
+  {
+    if (bytes_to_read == 0) {
+      logger_->log_debug("Yielding");
+      context->yield();
+    }
+    while (bytes_to_read > 0)
+    {
 
-			std::shared_ptr<FlowFileRecord> flowFile = std::static_pointer_cast<FlowFileRecord>(session->create());
-			if (flowFile == nullptr)
-				return;
+      std::shared_ptr<FlowFileRecord> flowFile = std::static_pointer_cast<FlowFileRecord>(session->create());
+      if (flowFile == nullptr)
+        return;
 
-			LPSTR source =
-				(LPSTR)((LPBYTE)event_record + sizeof(EVENTLOGRECORD));
+      LPSTR source =
+        (LPSTR)((LPBYTE)event_record + sizeof(EVENTLOGRECORD));
 
-			LPSTR computer_name =
-				(LPSTR)((LPBYTE)event_record + sizeof(EVENTLOGRECORD) +
-					strlen(source) + 1);
+      LPSTR computer_name =
+        (LPSTR)((LPBYTE)event_record + sizeof(EVENTLOGRECORD) +
+          strlen(source) + 1);
 
-			flowFile->addAttribute("source", source);
-			flowFile->addAttribute("record_number", std::to_string( event_record->RecordNumber));
-			flowFile->addAttribute("computer_name", computer_name);
-			
-			flowFile->addAttribute("event_time", getTimeStamp(event_record->TimeGenerated));
-			flowFile->addAttribute("event_type", typeToString(event_record->EventType));
-			//flowFile->addAttribute("", event_message);
+      flowFile->addAttribute("source", source);
+      flowFile->addAttribute("record_number", std::to_string( event_record->RecordNumber));
+      flowFile->addAttribute("computer_name", computer_name);
+      
+      flowFile->addAttribute("event_time", getTimeStamp(event_record->TimeGenerated));
+      flowFile->addAttribute("event_type", typeToString(event_record->EventType));
+      //flowFile->addAttribute("", event_message);
 
-			
-			io::DataStream stream((const uint8_t*)(event_record + event_record->DataOffset), event_record->DataLength);
-			// need an import from the data stream.
-			session->importFrom(stream, flowFile);
-			session->transfer(flowFile, Success);
-			bytes_to_read -= event_record->Length;
-			event_record = (EVENTLOGRECORD *)
-				((LPBYTE)event_record + event_record->Length);
-		}
+      
+      io::DataStream stream((const uint8_t*)(event_record + event_record->DataOffset), event_record->DataLength);
+      // need an import from the data stream.
+      session->importFrom(stream, flowFile);
+      session->transfer(flowFile, Success);
+      bytes_to_read -= event_record->Length;
+      event_record = (EVENTLOGRECORD *)
+        ((LPBYTE)event_record + event_record->Length);
+    }
 
-		event_record = (EVENTLOGRECORD *)&buffer;
-		logger_->log_trace("All done no more");
-	}
-	else {
-		LogWindowsError();
-		logger_->log_trace("Yielding due to error");
-		context->yield();
-	}
+    event_record = (EVENTLOGRECORD *)&buffer;
+    logger_->log_trace("All done no more");
+  }
+  else {
+    LogWindowsError();
+    logger_->log_trace("Yielding due to error");
+    context->yield();
+  }
 
 }
 } /* namespace processors */
diff --git a/extensions/windows-event-log/TailEventLog.h b/extensions/windows-event-log/TailEventLog.h
index 908bed0..291d8dc 100644
--- a/extensions/windows-event-log/TailEventLog.h
+++ b/extensions/windows-event-log/TailEventLog.h
@@ -35,27 +35,21 @@
 const LPWSTR pEventTypeNames[] = { L"Error", L"Warning", L"Informational", L"Audit Success", L"Audit Failure" };
 char log_name[255] = "Application";
 
-//! TailEventLog Class
 class TailEventLog : public core::Processor
 {
 public:
-	//! Constructor
-	/*!
-	 * Create a new processor
-	 */
-	TailEventLog(std::string name, utils::Identifier uuid = utils::Identifier())
-	: core::Processor(name, uuid), logger_(logging::LoggerFactory<TailEventLog>::getLogger()),max_events_(1){
-	}
-	//! Destructor
-	virtual ~TailEventLog() = default;
-	//! Processor Name
-	static const std::string ProcessorName;
-	//! Supported Properties
-	static core::Property LogSourceFileName;
-	static core::Property MaxEventsPerFlowFile;
+  TailEventLog(std::string name, utils::Identifier uuid = utils::Identifier())
+  : core::Processor(name, uuid), logger_(logging::LoggerFactory<TailEventLog>::getLogger()),max_events_(1){
+  }
+  virtual ~TailEventLog() = default;
+  static const std::string ProcessorName;
 
-	//! Supported Relationships
-	static core::Relationship Success;
+  // Supported Properties
+  static core::Property LogSourceFileName;
+  static core::Property MaxEventsPerFlowFile;
+
+  // Supported Relationships
+  static core::Relationship Success;
 
 public:
   /**
@@ -65,81 +59,74 @@
    * ProcessSession objects.
    */
   void onSchedule(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSessionFactory> &sessionFactory) override;
-	//! OnTrigger method, implemented by NiFi TailEventLog
-	virtual void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
-	//! Initialize, over write by NiFi TailEventLog
-	virtual void initialize(void) override;
+  // OnTrigger method, implemented by NiFi TailEventLog
+  virtual void onTrigger(const std::shared_ptr<core::ProcessContext> &context, const std::shared_ptr<core::ProcessSession> &session) override;
+  // Initialize, over write by NiFi TailEventLog
+  virtual void initialize(void) override;
 
 protected:
 
-	virtual void notifyStop() override{
-		CloseEventLog(log_handle_);
-	}
+  virtual void notifyStop() override{
+    CloseEventLog(log_handle_);
+  }
 
 
-	inline std::string typeToString(WORD wEventType)
-	{
-		switch (wEventType)
-		{
-		case EVENTLOG_ERROR_TYPE:
-			return "Error";
-		case EVENTLOG_WARNING_TYPE:
-			return "Warning";
-		case EVENTLOG_INFORMATION_TYPE:
-			return "Information";
-		case EVENTLOG_AUDIT_SUCCESS:
-			return "Audit Success";
-		case EVENTLOG_AUDIT_FAILURE:
-			return "Audit Failure";
-		default:
-			return "Unknown Event";
-		}
-	}
+  inline std::string typeToString(WORD wEventType)
+  {
+    switch (wEventType)
+    {
+    case EVENTLOG_ERROR_TYPE:
+      return "Error";
+    case EVENTLOG_WARNING_TYPE:
+      return "Warning";
+    case EVENTLOG_INFORMATION_TYPE:
+      return "Information";
+    case EVENTLOG_AUDIT_SUCCESS:
+      return "Audit Success";
+    case EVENTLOG_AUDIT_FAILURE:
+      return "Audit Failure";
+    default:
+      return "Unknown Event";
+    }
+  }
 
-	std::string getTimeStamp(const DWORD Time)
-	{
-		uint64_t ullTimeStamp = 0;
-		uint64_t SecsTo1970 = 116444736000000000;
-		SYSTEMTIME st;
-		FILETIME ft, ftLocal;
+  std::string getTimeStamp(const DWORD Time)
+  {
+    uint64_t ullTimeStamp = 0;
+    uint64_t SecsTo1970 = 116444736000000000;
+    SYSTEMTIME st;
+    FILETIME ft, ftLocal;
 
-		ullTimeStamp = Int32x32To64(Time, 10000000) + SecsTo1970;
-		ft.dwHighDateTime = (DWORD)((ullTimeStamp >> 32) & 0xFFFFFFFF);
-		ft.dwLowDateTime = (DWORD)(ullTimeStamp & 0xFFFFFFFF);
+    ullTimeStamp = Int32x32To64(Time, 10000000) + SecsTo1970;
+    ft.dwHighDateTime = (DWORD)((ullTimeStamp >> 32) & 0xFFFFFFFF);
+    ft.dwLowDateTime = (DWORD)(ullTimeStamp & 0xFFFFFFFF);
 
-		FileTimeToLocalFileTime(&ft, &ftLocal);
-		FileTimeToSystemTime(&ftLocal, &st);
+    FileTimeToLocalFileTime(&ft, &ftLocal);
+    FileTimeToSystemTime(&ftLocal, &st);
 
-		std::stringstream  str;
-		str.precision(2);
-		str << st.wMonth << "/" << st.wDay << "/" << st.wYear << " " << st.wHour << ":" << st.wMinute << ":" << st.wSecond;
+    std::stringstream  str;
+    str.precision(2);
+    str << st.wMonth << "/" << st.wDay << "/" << st.wYear << " " << st.wHour << ":" << st.wMinute << ":" << st.wSecond;
 
-		return str.str();
-	}
+    return str.str();
+  }
 
+  void LogWindowsError(void)
+  {
+    auto error_id = GetLastError();
+    LPVOID lpMsg;
 
-	/**
+    FormatMessage(
+      FORMAT_MESSAGE_ALLOCATE_BUFFER |
+      FORMAT_MESSAGE_FROM_SYSTEM,
+      NULL,
+      error_id,
+      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+      (LPTSTR)&lpMsg,
+      0, NULL);
 
-	*/
-	void LogWindowsError(void)
-	{
-		auto error_id = GetLastError();
-		LPVOID lpMsg;
-
-		FormatMessage(
-			FORMAT_MESSAGE_ALLOCATE_BUFFER |
-			FORMAT_MESSAGE_FROM_SYSTEM,
-			NULL,
-			error_id,
-			MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
-			(LPTSTR)&lpMsg,
-			0, NULL);
-
-		logger_->log_debug("Error %d: %s\n", (int)error_id, (char *)lpMsg);
-
-	}
-
-
+    logger_->log_debug("Error %d: %s\n", (int)error_id, (char *)lpMsg);
+  }
 
 private:
   std::mutex log_mutex_;
diff --git a/extensions/windows-event-log/wel/MetadataWalker.cpp b/extensions/windows-event-log/wel/MetadataWalker.cpp
index 2fe93ed..495069a 100644
--- a/extensions/windows-event-log/wel/MetadataWalker.cpp
+++ b/extensions/windows-event-log/wel/MetadataWalker.cpp
@@ -98,7 +98,7 @@
     }
   }
 
-	return true;
+  return true;
 }
 
 std::vector<std::string> MetadataWalker::getIdentifiers(const std::string &text) const {
@@ -151,7 +151,7 @@
 }
 
 std::map<std::string, std::string> MetadataWalker::getIdentifiers() const {
-	return replaced_identifiers_;
+  return replaced_identifiers_;
 }
 
 std::string MetadataWalker::updateXmlMetadata(const std::string &xml, EVT_HANDLE metadata_ptr, EVT_HANDLE event_ptr, bool update_xml, bool resolve, const std::string &regex) {
diff --git a/extensions/windows-event-log/wel/MetadataWalker.h b/extensions/windows-event-log/wel/MetadataWalker.h
index 138d058..6fd3204 100644
--- a/extensions/windows-event-log/wel/MetadataWalker.h
+++ b/extensions/windows-event-log/wel/MetadataWalker.h
@@ -63,7 +63,7 @@
   virtual bool for_each(pugi::xml_node &node) override;
 
   static std::string updateXmlMetadata(const std::string &xml, EVT_HANDLE metadata_ptr, EVT_HANDLE event_ptr, bool update_xml, bool resolve, const std::string &regex = "");
-	
+  
   std::map<std::string, std::string> getFieldValues() const;
 
   std::map<std::string, std::string> getIdentifiers() const;
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.cpp b/extensions/windows-event-log/wel/WindowsEventLog.cpp
index 90b3613..c16b8ed 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.cpp
+++ b/extensions/windows-event-log/wel/WindowsEventLog.cpp
@@ -208,7 +208,7 @@
 }
 
 EVT_HANDLE WindowsEventLogHandler::getMetadata() const {
-	return metadata_provider_;
+  return metadata_provider_;
 }
 
 } /* namespace wel */
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.h b/extensions/windows-event-log/wel/WindowsEventLog.h
index a4d449b..1574895 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.h
+++ b/extensions/windows-event-log/wel/WindowsEventLog.h
@@ -87,7 +87,7 @@
 
   static std::string getMetadataString(METADATA val) {
     static std::map< METADATA, std::string> map = {
-        {LOG_NAME,	"LOG_NAME" },
+        {LOG_NAME,  "LOG_NAME" },
         {SOURCE,"SOURCE"},
         {TIME_CREATED,"TIME_CREATED" },
         {EVENTID,"EVENTID"},
diff --git a/main/MainHelper.h b/main/MainHelper.h
index 4126226..b9d3560 100644
--- a/main/MainHelper.h
+++ b/main/MainHelper.h
@@ -25,9 +25,9 @@
 
 #ifdef WIN32
 extern "C" {
-	FILE* __cdecl _imp____iob_func();
+  FILE* __cdecl _imp____iob_func();
 
-	FILE* __cdecl __imp___iob_func();
+  FILE* __cdecl __imp___iob_func();
 }
 #endif
 
diff --git a/nanofi/include/cxx/Plan.h b/nanofi/include/cxx/Plan.h
index 4d9aec1..152d65b 100644
--- a/nanofi/include/cxx/Plan.h
+++ b/nanofi/include/cxx/Plan.h
@@ -20,7 +20,7 @@
 #define LIBMINIFI_CAPI_PLAN_H_
 
 #ifndef WIN32
-	#include <dirent.h>
+  #include <dirent.h>
 #endif
 #include <cstdio>
 #include <cstdlib>
diff --git a/nanofi/src/api/nanofi.cpp b/nanofi/src/api/nanofi.cpp
index 616398c..f6e40c8 100644
--- a/nanofi/src/api/nanofi.cpp
+++ b/nanofi/src/api/nanofi.cpp
@@ -282,7 +282,7 @@
     flow_file_record * ffr = create_ff_object_nc();
 
     if (ffr->crp) {
-    	delete static_cast<std::shared_ptr<minifi::core::ContentRepository>*>(ffr->crp);
+      delete static_cast<std::shared_ptr<minifi::core::ContentRepository>*>(ffr->crp);
     }
     ffr->crp = static_cast<void*>(new std::shared_ptr<minifi::core::ContentRepository>(ctx->getContentRepository()));
 
diff --git a/nanofi/src/core/cstream.c b/nanofi/src/core/cstream.c
index 2c220ed..5468273 100644
--- a/nanofi/src/core/cstream.c
+++ b/nanofi/src/core/cstream.c
@@ -20,7 +20,7 @@
 #define NOMINMAX
 #include <winsock2.h>
 #else
-#include <sys/socket.h>	// socket
+#include <sys/socket.h>  // socket
 #include <arpa/inet.h> // inet_addr
 #include <netdb.h> // hostent
 #include <unistd.h> // close
